1

我正在尝试在计算 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 ...

在这一点上,我不确定是什么导致了这个问题。

4

2 回答 2

1

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

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

所以我们找到了断点的地址。如果在你运行时它没有被解析,这意味着我们无法在那个地址实现断点(例如,由于某种原因,无法将陷阱写入那里的程序内存。)

于 2016-08-30T16:08:33.940 回答
1

我会尝试target modules dump line-table Main.cpp在 lldb 中查看 lldb 认为行表的样子。然后用类似的东西查看二进制文件的 DWARF 行表readelf --debug-dump=decodedline MipsTest.bin(我认为这是正确的 - 我正在查看网络上的 readelf 主页)。

于 2016-08-30T07:53:17.327 回答