0

私は Eclipse を使用して、ARM プロセッサ用のソフトウェアを開発し、リモートでデバッグしています。残念ながら、私が書いているソフトウェアはマルチスレッドであり、デバッグできません。スレッド コードにブレークポイントを配置すると、次のメッセージが表示されます。

Child terminated with signal = 5

Child terminated with signal = 0x5

GDBserver exiting

かなりのグーグルを行った後、これを使用することを提案する「解決策」を見つけました:

strip --strip-debug libpthread.so.0

残念ながら、まだ終了エラーが発生します。

これを理解するためにあなたの助けを本当に感謝します!

ありがとう!

4

1 に答える 1

1

まず、この (およびその後の) エラー:

cc1.exe: error: unrecognized command line option "-fstrip-debug"

strip --strip-debugGCC コマンドラインに etc を追加することによって発生します。それは明らかに偽物であり、あなたのグーグルが示唆したものではありません。(これらのエラーへの参照を削除するために質問をクリーンアップすることをお勧めします。これらは問題とは関係ありません。)

それ示唆した(またはすべきだった)ことは、を使用するstrip --strip-debug libpthread.so.0 代わりに使用してstrip libpthread.so.0います。

これは、libpthread.so.0 が完全に削除されている場合、GDB がスレッドを処理できないためです。

デバッグ シンボルを削除することはできますが (strip --strip-debug libpthread.so.0実際にそうです)、すべてのシンボルを削除することstrip libpthread.so.0はお勧めできません (TM)。

あなたは (明らかに) 自分で を構築libpthread.so.0していないので、それを削除する必要もありません。

ただし、ツールチェーンのプロバイダーがそれを台無しにしていないことを確認する必要があります。次のコマンドは を報告するべきではなく、実際には(定義されたシンボルとして)no symbols一致するものを出力する必要があります。nptl_version

nm /path/to/target/libpthread.so.0 | grep nptl_version

これまでのところすべてが順調であると仮定すると、問題を診断できますが、...十分な情報を提供しなかったことを除いて;-(特に、GDBを実行すると、次のように出力されるはずusing /path/to/libthread_db.so.0です.GDBコンソールを探す必要があるかもしれません. Eclipse で、またはコマンド ラインから GDB を実行する場合は、出力される内容を正確に確認できます。

libthread_db.so.0(ホスト用) のバージョンがlipthread.so.0(ターゲット用)のバージョンと一致することが重要です。どちらもツールチェーン ベンダーから提供される必要があります。

あなたの問題は、GDBがまったく見つからないかlibthread_db.so.0、間違ったものを見つけた可能性が最も高いです。

于 2011-06-10T20:33:44.377 に答える