【发布时间】:2017-03-19 14:40:13
【问题描述】:
使用 gdb 调试器我可以执行什么命令来单步执行并显示将要执行的下一条指令?我熟悉 windbg,此操作非常简单。
例如,我有以下函数,当我通过 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)
【问题讨论】:
-
那么文档或内置帮助您不明白怎么办?您通过简单的在线搜索发现了什么?
-
@Olaf 我实际上有 GNU 源级调试器手册,并且我已经习惯于确定如何单步执行等。但是我没有看到任何有关如何显示下一条指令的信息。跨度>
-
@Olaf 感谢我发现 show disassemble-next-line 并设置 disassemble-next-line 的动机。
-
老实说,我希望轻微的踢球没有造成太大的伤害:-) 否决了您的问题,但我会为您的自我回答抹去 - 它可能对我也有用。 (搜索它对我来说从来没有那么重要——我很少在汇编程序级别进行广泛的调试)。