1

Brainfsck でマンデルブロー集合を計算する 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 に答える