[英]Higher line numbers are unresolved as breakpoints when debugging using lldb
我试图在计算Brainfsck中的Mandelbrot集的MIPS32r6程序中设置断点。 该程序本身是用C ++编写的,使用Clang编译,而我正在使用LLDB进行调试。
我遇到的问题是,在LLDB中时,我可以设置某些断点,主要是在较低的行号上,没有问题。 但是,在Main.cpp中的第70行之后,断点显示为“未解决”(即使执行断点列表显示它们具有完全合理的地址)。 也就是说,我尝试在70号线之后设置的所有断点都没有解决,而70号线之前的所有合理断点都可以解决而没有问题。
我已经在这里链接了二进制文件的副本: 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 ...
在这一点上,我不确定是什么导致了此问题。
我会尝试将target modules dump line-table Main.cpp
到lldb中的target modules dump line-table Main.cpp
中,以查看lldb认为该行表是什么样子。 然后使用诸如readelf --debug-dump=decodedline MipsTest.bin
类的东西查看二进制文件的DWARF线表(我认为是对的-我正在查看Web上的readelf主页)。
使用示例二进制文件,我得到:
(lldb) b s -l 72
Breakpoint 1: where = MipsTest.bin`main + 544 at Main.cpp:72, address = 0x000134a0
因此,我们找到了该断点的地址。 如果在运行时无法解决该问题,则意味着我们无法在该地址处实现断点(例如,由于某种原因无法将陷阱写入那里的程序存储器中。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.