2016-11-06 133 views
-1

使用gdb debbuger什麼命令可以執行到單個步驟並顯示下一條將被執行的指令?我熟悉windbg這裏的操作非常簡單。GDB單步執行程序集並顯示將執行的下一條指令。

因此,舉例來說,我有以下功能,並通過si我想要顯示下一條將執行的指令,而不必通過反彙編進行完全反彙編。我怎樣才能做到這一點?

Dump of assembler code for function isEven: 
    0x0000000100000f20 <+0>: push %rbp 
    0x0000000100000f21 <+1>: mov %rsp,%rbp 
    0x0000000100000f24 <+4>: mov $0x2,%eax 
    0x0000000100000f29 <+9>: mov %edi,-0x4(%rbp) 
=> 0x0000000100000f2c <+12>: mov -0x4(%rbp),%edi 
    0x0000000100000f2f <+15>: mov %eax,-0xc(%rbp) 
    0x0000000100000f32 <+18>: mov %edi,%eax 
    0x0000000100000f34 <+20>: cltd 
    0x0000000100000f35 <+21>: mov -0xc(%rbp),%edi 
    0x0000000100000f38 <+24>: idiv %edi 
    0x0000000100000f3a <+26>: cmp $0x0,%edx 
    0x0000000100000f3d <+29>: jne 0x100000f4f <isEven+47> 
    0x0000000100000f43 <+35>: movl $0x1,-0x8(%rbp) 
    0x0000000100000f4a <+42>: jmpq 0x100000f56 <isEven+54> 
    0x0000000100000f4f <+47>: movl $0x0,-0x8(%rbp) 
    0x0000000100000f56 <+54>: mov -0x8(%rbp),%eax 
    0x0000000100000f59 <+57>: pop %rbp 
    0x0000000100000f5a <+58>: retq 
End of assembler dump. 
(gdb) 
+0

那麼你不明白的文檔或內置幫助是什麼?你通過簡單的在線搜索找到了什麼? – Olaf

+0

@Olaf我實際上有GNU源代碼級別的調試器手冊,我用來確定如何單步執行等。但是我沒有看到有關如何顯示下一條指令的任何信息。 – dcrearer

+0

@Olaf感謝我發現的動機show disassemble-next-line並設置了反彙編 - 下一行。 – dcrearer

回答

4

我發現下面的指令序列完成了我的目標。

(gdb) show disassemble-next-line 
Debugger's willingness to use disassemble-next-line is off. 
(gdb) set disassemble-next-line on 
(gdb) show disassemble-next-line 
Debugger's willingness to use disassemble-next-line is on. 

謝謝奧拉夫!

(gdb) si 
0x0000000100000f32 27  if(num % 2 == 0) 
    0x0000000100000f2c <isEven+12>: 8b 7d fc mov -0x4(%rbp),%edi 
    0x0000000100000f2f <isEven+15>: 89 45 f4 mov %eax,-0xc(%rbp) 
=> 0x0000000100000f32 <isEven+18>: 89 f8 mov %edi,%eax 
    0x0000000100000f34 <isEven+20>: 99 cltd 
    0x0000000100000f35 <isEven+21>: 8b 7d f4 mov -0xc(%rbp),%edi 
    0x0000000100000f38 <isEven+24>: f7 ff idiv %edi 
    0x0000000100000f3a <isEven+26>: 83 fa 00 cmp $0x0,%edx 
    0x0000000100000f3d <isEven+29>: 0f 85 0c 00 00 00 jne 0x100000f4f <isEven+47> 
+0

實現大致相同結果的另一種方法:'display/4i $ pc' –