2017-09-11 27 views
0

私のアプリケーションは、キャッチされない例外のためクラッシュしました(特定の条件の下でC++コードがキャッチされない例外をスローします)。私はコアファイルをgdbにしようとしています。バイナリライブラリは "ストライプ化されていません"。スタックトレースには、キャッチされない例外がスローされる関数(my code)が表示されますが、関数の引数を表示しようとすると、常に現在のコンテキストにはシンボルxxxが表示されません。 info argsは "シンボルテーブルの情報がありません"も返します。gdbコアファイルが関数のパラメータを参照していません

誰でも光を放つことができますか?スタックを巻き戻し/破損させる未知の例外によるものですか?

おかげで、 フランク

+0

コアダンプに必ずしもすべてのシンボルが含まれるとは限りません。これは、ライブラリがないか、デバッグされていないビルドライブラリがあるか、コンパイラの最適化さえも原因です。 – Griffin

+0

また、新しい質問をする前に、firs [search stack overflow](https://stackoverflow.com/search?q=gdb+No+symbol+table+info+available)を試してください。 – Griffin

答えて

1

あなたのバイナリはデバッグ情報を欠いています。あなたはgccでそれを構築し、デバッグする場合

core、あなたは正確でバイナリを再構築することにより、この状態から回復できる可能性があり(それがクラッシュを再現するのは難しい例えば場合)あなたは既に持っています同じソースとコマンドライン、-gを追加してコマンドをコンパイルしてリンクします。 (注意:あなたは同じコンパイル行を使用する必要があります。-g-O2を交換することはしないだろう。)

をクラッシュは、単に、-g -O0でバイナリを再構築GDBの下でそれを実行して、楽しんで、再現することは困難ではない場合「簡単な」デバッグ

バイナリライブラリは "ストライプ化されていません"。

これは、あなたが何を意味すると思うかを意味するものではありません。 Not strippedは、シンボルテーブルがバイナリにまだ存在していることを意味します。

GDBはこのシンボルテーブルを読んで、アドレス範囲を関数名にマッピングします。

しかし、名前とローカル変数やパラメータの値を回復するために、あなたは-gフラグはほとんどのコンパイラのために何をするかである)デバッグ情報でコンパイルする必要があります。

+0

最適化フラグも下げてください。 – dlmeetei

+0

@dlmeetei既存の 'core'ファイルを解析したいとは限りません。 –

+0

しかし、私たちは再コンパイルを要求しています – dlmeetei

関連する問題