2017-12-07 6 views
0

私のプログラムはうまくいっています。私がしたいことはすべて実行して、テストに合格し、Valgrindは大丈夫だと言います。唯一の問題は、ある時点で実行を一時停止し、QtCreator(GDBを使用)のデバッグビューで一部のオブジェクトの状態を検査しようとすると、いくつかの変数が<not-accessible>になり、実行を再開するとセグメント化エラーになるという事実です。QEGCreatorでGDBで変数を検査した後のSEGFAULT

もう少し具体的には、プログラムはシングルスレッドであり、これはツリー構造のポインタに続く間に発生します。この構造の出力はテストの出力によってうまくいくようです。

誰かが原因を知っていますか?おそらく私は幸いなことにテストに影響を与えない方法でスタックを混乱させたのでしょうか、それともIDEやデバッガの問題で気にするべきではないでしょうか?すべての回答に事前に感謝します。

+0

私はあまりにも信頼性の低い(バグ)GDB(またはおそらくQt Creatorとの統合)が見つかりました。時々、それは数分掛かってしまい、ときどきQtを再起動する必要がありました。それがQtかGDBの問題かどうかはわかりません。 –

答えて

0

考えられる原因を知っている人はいますか?

プログラムに複数のスレッドがありますか?

プログラムがGDBブレークポイントが存在するかどうかによって動作が異なる場合、プログラムのデータ競合が99.99%であり、 "不適切な"時間に停止するという事実によってその事実が明らかになる。

Linuxでは、Thread Sanitizerを使用してデータ競合をチェックできます。

+0

答えをありがとう。私はこの種の "heisenbug"を知っています。問題は、それが単一のスレッドアプリだということです。 –

関連する問題