Покажите текущую инструкцию по сборке в GDB

Я делаю некоторую отладку на уровне ассемблера в GDB. Существует ли способ заставить GDB показывать мне текущую инструкцию по сборке таким же образом, что это показывает текущую исходную строку? Вывод по умолчанию после каждой команды похож на это:

0x0001433f      990         Foo::bar(p);

Это дает мне адрес текущей команды, но я должен удержать на месте обращение к выводу disassemble для наблюдения, какую инструкцию я в настоящее время выполняю.

169
задан Peter Mortensen 14 June 2017 в 23:10
поделиться

3 ответа

[

]Вы можете переключиться на компоновку сборки в GDB:[

] [
(gdb) layout asm
] [

]Смотрите []здесь[] для получения дополнительной информации. Текущая инструкция по сборке будет показана в окне ассемблера.[

] [
   ┌───────────────────────────────────────────────────────────────────────────┐
   │0x7ffff740d756 <__libc_start_main+214>  mov    0x39670b(%rip),%rax        #│
   │0x7ffff740d75d <__libc_start_main+221>  mov    0x8(%rsp),%rsi              │
   │0x7ffff740d762 <__libc_start_main+226>  mov    0x14(%rsp),%edi             │
   │0x7ffff740d766 <__libc_start_main+230>  mov    (%rax),%rdx                 │
   │0x7ffff740d769 <__libc_start_main+233>  callq  *0x18(%rsp)                 │
  >│0x7ffff740d76d <__libc_start_main+237>  mov    %eax,%edi                   │
   │0x7ffff740d76f <__libc_start_main+239>  callq  0x7ffff7427970 <exit>       │
   │0x7ffff740d774 <__libc_start_main+244>  xor    %edx,%edx                   │
   │0x7ffff740d776 <__libc_start_main+246>  jmpq   0x7ffff740d6b9 <__libc_start│
   │0x7ffff740d77b <__libc_start_main+251>  mov    0x39ca2e(%rip),%rax        #│
   │0x7ffff740d782 <__libc_start_main+258>  ror    $0x11,%rax                  │
   │0x7ffff740d786 <__libc_start_main+262>  xor    %fs:0x30,%rax               │
   │0x7ffff740d78f <__libc_start_main+271>  callq  *%rax                       │
   └───────────────────────────────────────────────────────────────────────────┘
multi-thre process 3718 In: __libc_start_main     Line: ??   PC: 0x7ffff740d76d
#3  0x00007ffff7466eb5 in _IO_do_write () from /lib/x86_64-linux-gnu/libc.so.6
#4  0x00007ffff74671ff in _IO_file_overflow ()
   from /lib/x86_64-linux-gnu/libc.so.6
#5  0x0000000000408756 in ?? ()
#6  0x0000000000403980 in ?? ()
#7  0x00007ffff740d76d in __libc_start_main ()
   from /lib/x86_64-linux-gnu/libc.so.6
(gdb)
]
296
ответ дан 23 November 2019 в 20:49
поделиться

Команду

x/i $pc

можно настроить на постоянное выполнение с использованием обычного механизма конфигурации.

45
ответ дан 23 November 2019 в 20:49
поделиться

Вы можете сделать

display/i $pc

, и каждый раз, когда GDB останавливается, он будет отображать дизассемблирование следующей инструкции.

GDB-7.0 также поддерживает set disassemble-next-line на , что дизассемблирует всю следующую строку и дает вам больше контекста дизассемблирования.

136
ответ дан 23 November 2019 в 20:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: