1

マルチスレッドプログラムがクラッシュします。ファイルがあり.coreます。それをロードしてthread apply all backtrace、クラッシュしたスレッドについて次の出力を取得します。

Thread 1 (Thread 0x8567800 (runnable)):
#0  GG::serialize (this=0x847c180, outbin=@0xbf2f7c30)
    at basic_string.h:269

シリアル化中にクラッシュしましたが、で発生したと報告されていますSTL basic_string.h:269

serialize()しかし、関数で実際のクラッシュラインを取得するにはどうすればよいですか?

4

1 に答える 1

1

クラッシュが再現可能である場合、最も簡単な方法は、インライン化を無効にして障害のあるコードを再コンパイルすることです(でg++、これは-fno-inline-fno-default-inlineです)。

使用しているコアを分析する必要がある場合は、stringで呼び出されていたメソッドを見つけて、関数で対応する呼び出しを見つけてくださいserialize

場合によっては、関数を逆アセンブルして少し調べて、アセンブリコードのどの部分がソースコードに対応しているかを見つける以外に、問題を見つける方法がありません。次に、ローカル変数の値を把握するために、を実行しinfo registers、どの値がどのレジスタに移動されたかを追跡する必要があります。

于 2012-06-14T00:18:46.393 に答える