我正在GDB中進行一些彙編級調試。有沒有辦法讓GDB以與顯示當前源代碼行相同的方式顯示當前彙編指令?每個命令後默認輸出是這樣的:在GDB中顯示當前的彙編指令
0x0001433f 990 Foo::bar(p);
這給了我當前指令的地址,但我必須保持才能看到我目前正在執行該指令指回disassemble
輸出。
我正在GDB中進行一些彙編級調試。有沒有辦法讓GDB以與顯示當前源代碼行相同的方式顯示當前彙編指令?每個命令後默認輸出是這樣的:在GDB中顯示當前的彙編指令
0x0001433f 990 Foo::bar(p);
這給了我當前指令的地址,但我必須保持才能看到我目前正在執行該指令指回disassemble
輸出。
您可以在GDB切換到裝配佈局:
(gdb) layout asm
更多信息請參見here。當前彙編指令將在彙編器窗口中顯示。
┌───────────────────────────────────────────────────────────────────────────┐
│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)
命令
x/i $pc
可以被設置爲運行所有使用通常的配置機制的時間。
和'x/ni $ pc'來查看下n個指令,這通常很有用。 – 2009-12-14 19:26:57
從gdb內按Ctrl
x
2
屏幕將分成3部分。
第一部分將向您展示高級語言的正常代碼。
第二個將顯示相應的組件和相應的instruction Pointer
。
第三將爲您呈現正常的gdb
提示輸入命令。
我無法使用Ctrl-X 2啓動它,但它看起來像'gdb -tui'模式,這非常棒。 – 2015-05-09 09:39:39
這也可以通過gdb提示符中的'layout split'來實現。 – chucksmash 2017-02-28 05:01:50
設置以下選項:
set disassemble-next-line on
show disassemble-next-line
會給你的結果是這樣的:
(gdb) stepi
0x000002ce in ResetISR() at startup_gcc.c:245
245 {
0x000002cc <ResetISR+0>: 80 b5 push {r7, lr}
=> 0x000002ce <ResetISR+2>: 82 b0 sub sp, #8
0x000002d0 <ResetISR+4>: 00 af add r7, sp, #0
(gdb) stepi
0x000002d0 245 {
0x000002cc <ResetISR+0>: 80 b5 push {r7, lr}
0x000002ce <ResetISR+2>: 82 b0 sub sp, #8
=> 0x000002d0 <ResetISR+4>: 00 af add r7, sp, #0
一個更通用的裝配HOWTO問題:http://stackoverflow.com/questions/589653 /切換到彙編在gdb – 2015-05-09 10:34:32
相關:http://stackoverflow.com/questions/589653/switching-to-assembly-in-gdb – 2015-09-25 19:06:58