我试图在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 回答
我试着在lldb中做
target modules dump line-table Main.cpp
看看lldb认为线表是什么样的 . 然后用readelf --debug-dump=decodedline MipsTest.bin
(我认为's right - I'm在网上查看readelf主页)看二进制的DWARF行表 .使用您的示例二进制文件,我得到:
所以我们找到了断点的地址 . 如果在运行时未解析,则意味着我们无法在该地址处实现断点(例如由于某种原因无法将陷阱写入那里的程序存储器 . )