2016-08-30 14 views
1

BrainfsckでMandelbrot Setを計算するMIPS32r6プログラムでブレークポイントを設定しようとしています。プログラム自体はC++で書かれており、Clangでコンパイルされており、LLDBでデバッグしています。lldbを使用してデバッグすると、より高い行番号がブレークポイントとして解決されない

私が抱えている問題は、LLDBの場合、主に低い行番号で、何の問題もなく特定のブレークポイントを設定できることです。しかし、Main.cppのLine#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 ... 

この時点で、この問題を引き起こしている可能性があるかどうかはわかりません。

答えて

1

私はlldbでtarget modules dump line-table Main.cppを実行して、lldbがラインテーブルのように見えるか調べます。次に、readelf --debug-dump=decodedline MipsTest.binのようなものでバイナリのDWARFラインテーブルを見てください(私は正しいと思います - 私はウェブ上のreadelfメインページを見ています)。あなたのサンプルのバイナリを使用して

+0

'ターゲットモジュールダンプ行テーブルMain.cpp'は有効に見え、248行目( 'main'の唯一の関数の最終行です)に進みます。 'readelf'で示されているように、また有効です。また、248行目に行きます。 – ameisen

1

は、私が取得:

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

だから我々は、ブレークポイントのアドレスを発見しました。実行時に未解決の場合は、そのアドレスにブレークポイントを実装できなかったことを意味します(たとえば、何らかの理由でプログラムメモリにトラップを書き込めませんでした)。

+0

私は今、lldb-devボードでこれをやっていると思います(http://lists.llvm.org/pipermail/lldb-dev /2016-August/011146.html)でも、ここでフォローアップしてください。 私はデバッガが実際に何かをしようとしているのを見たことはありません。 70行目にブレークポイントを設定すると、Z0がスタブに送信されます(ブレークポイントが設定されます)。ブレークポイントを72行目に設定すると、スタブには何も送信されないので、トラップを設定できるかどうかを判断しようとしていません。 BBSの投稿ごとに、バイナリの.textセクションは完全に合理的に見えます。 – ameisen

関連する問題