Во время одной из моих отладочных сессий (FWIW, ARM) я заметил, что вывод разборки с исходным чередованием из GDB и objdump -S
отличается интересным образом: objdump
кажется хмелем через индивидуальную/группу инструкций и отобразить исходную строку, из которой были сгенерированы эти инструкции (порядок инструкций). С другой стороны, разбор GDB, похоже, перескакивает через строки источника и перечисляет все команды сборки, созданные из этой исходной строки (порядок источника).Разбор с использованием исходного кода с GDB и objdump
Для кода -O0
выходные данные обеих программ выглядят одинаково. Но для оптимизированного кода разборка GDB более полезна тем, что она собирает все эти разбросанные друг другу инструкции в одном месте, поэтому легко увидеть, что генерируется только этой исходной строкой (очевидно, в этом случае адреса команд не будут быть непрерывным).
Я думаю, что обе формы полезны в своем отношении. Мой вопрос заключается в том, настраивается ли поведение отображения обеих программ. IOW, могу ли я сказать GDB, чтобы отображать как objdump
, или сообщить objdump
, чтобы отобразить как GDB? Кроме того, есть ли другие инструменты, которые могут выполнять этот подвиг?
TIA.
Спасибо за это. Означает ли это, что способность GDB для разборки с чередованием элементов полностью исчезнет? Это меня беспокоит. – Jeenu
Нет, '/ m' в один прекрасный день (вероятно, долгое время) будет удален, но'/s' останется. Вы по-прежнему получаете инструкции источника +, это просто '/ s' заказы по адресу инструкции. – Andrew
Это было бы облом. Из того, что я собираю, '/ m' - единственный способ получить разборку, упорядоченную по источнику (что очень полезно, даже если оно имеет некоторые случаи краев). Надеюсь, это действительно, действительно, долгое время. – Jeenu