【问题标题】:GDB: look at the assembly at certain address?GDB:查看某个地址的程序集?
【发布时间】:2015-01-05 06:03:38
【问题描述】:

我正在开发一些 JIT 编译器,我正在使用 GDB 来首次亮相,我的代码在某些时候崩溃(段错误),但它在 jitted 代码处崩溃(它们是动态生成的)所以我没有得到堆栈帧信息,但我得到了以下回溯:

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

我想知道 GDB 是否可以反汇编位置 0x0000000001d98f22 的代码并将其显示给我。我试过disas 0x0000000001d98f22,但GDB抱怨No function contains specified address.


编辑: 我自己也修复了这个问题,disas 命令需要一个结束地址才能正常工作。

【问题讨论】:

    标签: debugging gcc gdb gnu jit


    【解决方案1】:

    如果 GDB 可以在位置 0x0000000001d98f22 处反汇编代码

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

    如果您的 JIT 是由 Java 完成的,您还应该阅读this answer

    【讨论】:

    • 一句警告:在具有可变指令编码(例如 x86 和 x86-64)的机器上,您必须注意开始反汇编的偏移量,特别是如果中断是由SIGILL 或类似的。否则你可能会得到一个不正确的反汇编。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多