1

同僚が作成したコードに対していくつかの単体テストを実行するプログラムを作成しています。Google C++ テスト フレームワークを使用しています。3 つのスレッドを生成する関数を実行してから、30 秒間実行します。実行後、プログラムはステータス 0 で終了します。これは明らかに予期された動作ではありません。次の行に cout ステートメントを入れたので、これ以上先に進まないことはわかっています。

私の質問は、これをgdbでデバッグする最良の方法は何ですか? プログラムはセグメンテーション違反などを行わず、終了するだけなので難しいです。終了呼び出しをフックして、長いバックトレースを取得する方法はありますか?

ご協力ありがとうございました。

編集:

cSystemCfg* pSystemCfg = new cSystemCfg();
std::cout << "Before runThing" << std::endl;
pSomething->runThing(&acq, pHwIf, pSystemCfg, pIf);
//Exits here, never gets to the next line
std::cout << "After runThing" << std::endl;
4

2 に答える 2

3

それに加えbreak exitて、ブレークポイントを設定する必要があるかもしれない他のいくつかの場所があります。この質問と回答を見てください。

于 2010-09-30T13:46:41.617 に答える
2

gdbの簡​​単なbreak exitコマンドでプログラムを停止し、プログラムがexit任意のスレッドから呼び出したときに状態を調べることができます。

これはもちろん、アサーションの失敗、未処理の例外、メインからの復帰exitなど、他の理由ではなく、プログラムが呼び出されて終了していることを前提としています。abort

于 2010-09-30T13:36:06.977 に答える