问题描述
我正在使用JIT编译器,通常需要在gdb / lldb中调试jitted代码的执行。但是,在使用call
执行固定代码的过程中尝试跳过nexti
时,出现gdb错误,
(gdb) nexti
Warning:
Cannot insert breakpoint 0.
Cannot access memory at address 0x7ffff7fcc056
在lldb中也是如此:
frame #0: 0x00007ffff7fcc053
-> 0x7ffff7fcc053: call r11
0x7ffff7fcc056: pop r11
0x7ffff7fcc058: pop r10
0x7ffff7fcc05a: pop r9
(lldb) ni
warning: Failed to set breakpoint site at 0x7ffff7fcc056 for breakpoint -2.1: error: 9 sending the breakpoint request
尝试在该地址手动设置断点(例如b *0x7ffff7fcc056
)时遇到相同的错误。我不知道这是否与我们调用调用的方式有关(将调用符号的地址加载到寄存器中并以此方式调用),而gdb / lldb无法解决如何跳过它。但这不能解释为什么将断点手动设置为地址也行不通的原因。还是因为正在执行的代码是在运行时生成的,并且仅存在于内存中,并且gdb / lldb尝试将地址与可执行二进制文件进行匹配,而该地址显然不存在?
我正在使用最新版本的gdb(9.2)和lldb(11)。任何帮助,将不胜感激。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)