最適化フラグで segfault する C++ コードがありますが、デバッグ フラグで実行するとそうではありません。これにより、デバッガーを使用できなくなります。coutステートメントの集中砲火以外に、他の方法/ガイドラインはありますか?
私は *nix プラットフォームで intel-12.1 コンパイラを使用していますが、valgrind でキャッチする必要があるのはメモリの問題であると確信しています。私を困惑させる唯一のことは、デバッグモードで表示されない理由です。
Valgrind は、Unix ベースのシステムでリリース モードの実行可能ファイルをトラブルシューティングするための便利なツールです (Windows では gflags と WinDebug が便利です)。
また、デバッガーをあきらめないことをお勧めします。デバッガー内でデバッグ以外の実行可能ファイルを実行しても、セグメンテーション違反に関する有用な情報を取得できます。多くの場合、最適化がオンになっていても、より多くのコンテキストを提供するために、ある程度のデバッグ情報を追加することもできます。Intel コンパイラが提供する可能性のあるデバッグ モードのヒープ チェック機能をチェックすることもできます。これは、これらがデバッグ ビルドで検出されない可能性があるためです (メモリ管理が異なるため)。
また、通常、「リリース モード」に使用できる最適化には複数のレベルがあることに注意してください。あまり積極的でない最適化レベルに戻してみて、エラーが引き続き発生するかどうかを確認してください。
また、Intel コンパイラーの Web サイトをチェックして、使用しているコンパイラーのバージョンの最適化に関するバグ修正/バグレポートがあるかどうかを確認することもできます。
これらのいずれも役に立たない場合は、別のコンパイラを使用して (Intel 固有のものを使用している場合を除く)、問題がコンパイラに関連しているかどうかを確認できます。
最後に、klm123 が指摘したように、ブロックをコメントアウトすることは、問題を特定する良い方法です。