3

セグメンテーション違反が原因でクラッシュするプログラムがあります。コア ファイルが生成されます。

gdb でコアを実行すると、次のようになります。

HP Itanium (32 または 64 ビット) およびターゲット HP-UX 11iv2 および 11iv3 用の HP gdb 6.1。

コアは「gcpf1fwcApp」によって生成されました。
プログラムはシグナル 6 で終了しました。中止されました。

コマンドを使用しました

スレッド適用すべて bt

スタック トレースを確認すると、待機状態のメイン スレッドでエラーが発生します。

ただし、GDB で同じプログラムを実行すると、スタック トレースでまったく異なるエラーが発生します。どちらがコアダンプよりも正しいようです。

プログラムには 31 個のスレッドがあります。

なぜこのような違いが得られるのでしょうか。

4

1 に答える 1

4

単に間違ったスレッドを見ている可能性があります。

を試してthread apply all where、スレッドの 1 つが実際にabort()ing であるかどうかを確認してください。

ライブ プロセスをデバッグする場合、スレッドが を受け取ると GDB が停止するSIGABRTため、関連するスレッドが表示される可能性があります。

コアをデバッグするとき (事後分析)、GDB はどのスレッドが関連しているかを認識していないため、OS がそれらをコアに保存した順序でそれらを表示します。Linux カーネルは、プロセスが最初に終了する原因となったスレッドを保存するため、Linux 上の GDB はコアから関連するスレッドを表示します。HP-UX ではそれができないので、GDB では代わりに「ランダムな」スレッドが表示されると思います。

于 2010-09-07T03:05:03.923 に答える