debugging - gdb/lldb 无法访问 jit 代码的内存地址
问题描述
我正在开发一个 JIT 编译器,并且经常需要调试 gdb/lldb 中 jitted 代码的执行。call
但是,在使用 jit 代码执行期间尝试跳过 a时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)。对此的任何帮助将不胜感激。
解决方案
推荐阅读
- c++ - 反向素数
- svg - 从 svg 中剪切对象
- progress-bar - 布尔玛进度文本在中间
- amazon-web-services - 无法使用 AWS Schema Conversion Tool 连接到 Amazon Aurora (MySQL)
- javascript - 带有动态选择框的动态表单 - Laravel
- python - Python:让一个函数调用另一个已输入参数的函数
- swift - 如何调整 SKShapeNode 的大小?
- ios - React-Native 可访问性限制 fontSize 缩放
- apache-spark - 从 Spark 数据集中收集结果的最佳方法是什么?
- c# - Asp.Net Core MVC Ajax 标签助手 - 从控制器返回错误不起作用