GDB:查看特定地址处的汇编代码?

4

我正在开发一些JIT编译器,并使用GDB进行调试,我的代码在某个时刻崩溃(segment fault),但是它是在即时编译的代码上崩溃的(它们是动态生成的),所以我无法获取堆栈帧信息。但是我得到了以下回溯信息:

#0  0x0000000001d98f22 in ?? () // JITTED CODE
#1  0x000000000000001d in ?? () // JITTED CODE
#2  ...callattribuite function....

我在想是否有可能让GDB反汇编位于0x0000000001d98f22位置的代码并向我显示。我尝试了“disas 0x0000000001d98f22”,但是GDB抱怨“没有函数包含指定的地址”。
编辑:我自己也修复了这个问题,“disas”命令需要一个结束地址才能正常工作。
1个回答

5

如果 GDB 可以在位置 0x0000000001d98f22 反汇编代码,那么是可能的。

是的:(gdb) x/20i 0x0000000001d98f22

如果您的 JIT 是由 Java 完成的,您还应该阅读此答案


不过需要提醒的是,在具有可变指令编码的机器上(例如x86和x86-64),您必须注意您开始反汇编的偏移量,特别是如果断点是由SIGILL或类似信号引起的。否则,您可能会得到错误的反汇编结果。 - Martin Törnwall

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接