2015-10-05 2 views
2

Во время одной из моих отладочных сессий (FWIW, ARM) я заметил, что вывод разборки с исходным чередованием из GDB и objdump -S отличается интересным образом: objdump кажется хмелем через индивидуальную/группу инструкций и отобразить исходную строку, из которой были сгенерированы эти инструкции (порядок инструкций). С другой стороны, разбор GDB, похоже, перескакивает через строки источника и перечисляет все команды сборки, созданные из этой исходной строки (порядок источника).Разбор с использованием исходного кода с GDB и objdump

Для кода -O0 выходные данные обеих программ выглядят одинаково. Но для оптимизированного кода разборка GDB более полезна тем, что она собирает все эти разбросанные друг другу инструкции в одном месте, поэтому легко увидеть, что генерируется только этой исходной строкой (очевидно, в этом случае адреса команд не будут быть непрерывным).

Я думаю, что обе формы полезны в своем отношении. Мой вопрос заключается в том, настраивается ли поведение отображения обеих программ. IOW, могу ли я сказать GDB, чтобы отображать как objdump, или сообщить objdump, чтобы отобразить как GDB? Кроме того, есть ли другие инструменты, которые могут выполнять этот подвиг?

TIA.

ответ

1

Я не считаю, что есть способ изменить поведение objdump, однако в последнее время добавлена ​​функция, которая добавлена ​​в gdb, что позволяет отображать чередуемый исходный код в инструкции. Эта функция настолько новая, что ее еще нет в любом выпуске, но вы можете увидеть патчи here и here.

С этими исправлениями старый флаг /m по-прежнему разбирает в строке строки исходного кода программы, в то время как новый флаг /s разбирает в инструкции. Долгосрочный план состоит в том, чтобы удалить /m, поскольку он сломан в некоторых случаях, и это не считалось целесообразным.

+0

Спасибо за это. Означает ли это, что способность GDB для разборки с чередованием элементов полностью исчезнет? Это меня беспокоит. – Jeenu

+1

Нет, '/ m' в один прекрасный день (вероятно, долгое время) будет удален, но'/s' останется. Вы по-прежнему получаете инструкции источника +, это просто '/ s' заказы по адресу инструкции. – Andrew

+0

Это было бы облом. Из того, что я собираю, '/ m' - единственный способ получить разборку, упорядоченную по источнику (что очень полезно, даже если оно имеет некоторые случаи краев). Надеюсь, это действительно, действительно, долгое время. – Jeenu

Смежные вопросы