繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM