首页 文章

使用lldb进行调试时,较高的行号无法解析为断点

提问于
浏览
1

我试图在MIPS32r6程序中设置断点,该程序计算Brainfsck中的Mandelbrot集 . 程序本身是用C语言编写的,用Clang编译,我正在用LLDB进行调试 .

我遇到的问题是,在LLDB中,我可以设置某些断点,主要是在较低的行号上,没有问题 . 但是,在Main.cpp中的第70行之后,断点将出现为'unresolved'(即使执行断点列表显示它们具有完全合理的地址) . 也就是说,我尝试在第70行之后设置的所有断点都是未解决的,并且在#70行之前的所有合理断点都没有问题 .

我've placed a copy of the binary that I'链接到这里:http://filebin.ca/2tJzo2LLBJWO/MipsTest.bin

这里有Main.cpp的副本:https://paste.ee/p/WYs8Y

我正在使用以下选项构建:

clang -mcompact-branches=always -fasynchronous-unwind-tables -funwind-tables -fexceptions -fcxx-exceptions -mips32r6 -O0 -g -glldb ...

lld --discard-none -znorelro --eh-frame-hdr ...

此时,我不确定可能导致此问题的原因 .

2 回答

  • 1

    我试着在lldb中做 target modules dump line-table Main.cpp 看看lldb认为线表是什么样的 . 然后用 readelf --debug-dump=decodedline MipsTest.bin (我认为's right - I'm在网上查看readelf主页)看二进制的DWARF行表 .

  • 1

    使用您的示例二进制文件,我得到:

    (lldb) b s -l 72
    Breakpoint 1: where = MipsTest.bin`main + 544 at Main.cpp:72, address = 0x000134a0
    

    所以我们找到了断点的地址 . 如果在运行时未解析,则意味着我们无法在该地址处实现断点(例如由于某种原因无法将陷阱写入那里的程序存储器 . )

相关问题