我正在GDB中进行一些程序集级调试。是否有一种方法可以让GDB以显示当前源行相同的方式向我显示当前的汇编指令?每个命令后的默认输出如下所示:
0x0001433f 990 Foo::bar(p);
这给了我当前指令的地址,但我必须继续引用反汇编的输出,以查看我当前正在执行的指令。
我正在GDB中进行一些程序集级调试。是否有一种方法可以让GDB以显示当前源行相同的方式向我显示当前的汇编指令?每个命令后的默认输出如下所示:
0x0001433f 990 Foo::bar(p);
这给了我当前指令的地址,但我必须继续引用反汇编的输出,以查看我当前正在执行的指令。
当前回答
如果您希望在逐步执行程序时自动显示接下来的几条指令,可以使用display命令,如下所示-
显示/3i $pc
上面的代码将在遇到断点或单步执行程序时显示3条指令。
更多的细节在这里的博客条目。
其他回答
有一个简单的解决方案,就是使用stepi,它依次向前移动1条asm指令,并显示周围的asm代码。
你可以这样做
display/i $pc
每次GDB停止时,它都会显示下一条指令的解压缩。
GDB-7.0还支持开启下一行反汇编,它将反汇编整个下一行,并为您提供更多的反汇编上下文。
如果您希望在逐步执行程序时自动显示接下来的几条指令,可以使用display命令,如下所示-
显示/3i $pc
上面的代码将在遇到断点或单步执行程序时显示3条指令。
更多的细节在这里的博客条目。
在gdb中按Ctrl x2,屏幕将分成3部分。
第一部分将向您展示高级语言中的正常代码。
其次将向您展示等效的程序集和相应的指令指针。
第三个将向您显示正常的gdb提示符以输入命令。
命令
x/i $pc
可以使用通常的配置机制将其设置为始终运行。