Я делаю некоторую отладку на уровне сборки в GDB. Есть ли способ заставить GDB показывать мне текущую инструкцию по сборке так же, как она показывает текущую исходную строку? Вывод по умолчанию после каждой команды выглядит следующим образом:
0x0001433f 990 Foo::bar(p);
Это дает мне адрес текущей инструкции, но я должен постоянно возвращаться к выводу команды disassemble
, чтобы увидеть, какую инструкцию я сейчас выполняю.
Ответы:
Вы можете переключиться на компоновку в GDB:
Смотрите здесь для получения дополнительной информации. Текущая инструкция по сборке будет показана в окне ассемблера.
источник
layout regs
tui reg vector
чтобы показать векторные регистры вместо целочисленных. (Тем не менее, это не всегда удобно, потому что он не позволяет вам выбрать только что-.v8_int16
то или что-то, поэтому на экране большой беспорядок.) См. Вики-тег x86 для быстрого обучения отладке asmsi
) и какая бесполезная функция (область просмотра, которая не отображает необходимую информацию). Там нет никакого смысла вниз голосования этого ответа , так как вы только посланник ...·layout src
чтобы увидеть исходный код при отладке, а также стоит помнить о выходе из этого режима,CTRL+x+a
Ты можешь сделать
и каждый раз, когда GDB останавливается, он будет отображать разборку следующей инструкции.
GDB-7.0
также поддерживаетset disassemble-next-line on
, что будет разбирать всю следующую строку, и даст вам больше контекста разборки.источник
si
(но неs
)?Команда
можно настроить на постоянную работу с использованием обычного механизма настройки.
источник
x/ni $pc
для просмотра следующих n инструкций, что часто бывает весьма полезно.Установка следующей опции:
Даст вам результаты, которые выглядят так:
источник
Если вы хотите, чтобы следующие несколько инструкций отображались автоматически при пошаговом выполнении программы, вы можете использовать команду display следующим образом:
display /3i $pc
Приведенное выше будет отображать 3 инструкции при каждом достижении точки останова или при выполнении одного шага программы.
Более подробная информация в блоге здесь .
источник
Изнутри GDB нажмите
Ctrl
x
2
и экран разделится на 3 части.Первая часть покажет вам нормальный код на языке высокого уровня.
Второй покажет вам сборку, эквивалентную и соответствующую
instruction Pointer
.Третий представит вам обычную
gdb
подсказку для ввода команд.источник
Ctrl-X 2
, но он выглядит какgdb -tui
режим, и это здорово.layout split
из командной строки gdb.GDB Dashboard
https://github.com/cyrus-and/gdb-dashboard
Эта конфигурация GDB использует официальный API GDB Python, чтобы показать нам все, что мы хотим, когда GDB останавливается после, например
next
, во многом как TUI.Однако я обнаружил, что эта реализация является более надежной и настраиваемой альтернативой встроенному режиму TUI GDB, как объяснено по адресу: разделенное представление gdb с кодом
Например, мы можем настроить GDB Dashboard для отображения разборки, источника, регистров и стека с помощью:
Вот как это выглядит, если вместо этого вы активируете все доступные виды:
Смежные вопросы:
источник