2012-06-28 7 views
28

私はC++プロジェクトをデバッグする必要がありますが、1つの依存関係がデバッグモードでコンパイルされず、これまで問題を修正できなかったため、リリースモードでプロジェクトをデバッグしようと思います。リリースモードでのデバッグ方法は?

現在NULLポインタによるアプリケーションのクラッシュが、私は、エラーを引き起こしているコードを持っていません。リリース・モードではブレーク・ポイントが無視されるため、エラーを見つけるには何が最善の方法かを知りたいと思います。

答えて

52

VSでは、プロジェクトを右クリックし、[プロパティ]を選択します。

  1. C/C++ノードをクリックします。デバッグ情報形式をC7互換(/ Z7)またはプログラムデータベース(/ Zi)に設定します。

  2. リンカを展開し、[全般]ノードをクリックします。 Incremental LinkingをNo(/ INCREMENTAL:NO)に設定します。

  3. [デバッグ]ノードを選択します。 Generate Debug InfoをYes(/ DEBUG)に設定します。

  4. 最適化ノードを選択します。 ReferencesをYesに設定します(/ OPT:REF)。

    /OPT:REFが指定されている場合、/ OPT:ICFはデフォルトでオンです。 Microsoftのドキュメントから直接リッピングしています

:私はこれを行う

時間のすべてとほとんどはもうデバッグモードでデバッグすることはありません。ご存じのように、リリースビルドで発生する多くのエラーは、デバッグビルドでは発生しません(ほぼ確実にUBを呼び出すことによって発生するエラー)。

また、Iは画像処理のトンを使用し、大きな画像の圧縮/伸張の多くを実行するプロジェクトに取り組みます。遅いデバッグビルドを使用することは、単に実用的ではありません。

+0

感謝の問題を解決!私はこれらすべての設定の影響をあまり知らないので、実際のリリース版をコンパイルするときに、それらをデバッグにのみ使用して再度削除する方が良いでしょうか? – Pedro

+5

@Pedro:はい、それを元に戻し、リリースのデフォルト値をそのままにしておくのが最善です。私は通常、この設定のための新しいビルドタイプ、すなわち「w/symbolを解放する」を作成します。つまり、これらのスイッチが実際に何をするのかを勉強するのは害ではありません。 –

4

プロジェクトの設定を変更して再コンパイルするだけでは必ずしもできません。
デバッグしたいリリースバージョンや、クライアントから送信されたダンプファイルがあることがあります。

の最適化とリリースでC++プロジェクトをコンパイル

は、デバッガは時々右のオブジェクト情報は表示されません。

ローカル変数は、このオブジェクトの情報はデバッガに失われ、通常は行くことは最初、と何度もあります。

理由は、コンパイラが情報を保持するために利用可能なハードウェア・レジスタを使用することで、ローカル変数の割り当てを避けるために最適化を使用しています。

私はここで不足している情報を見つけるための方法を提案してきました:

Debugging Release Projects in C++ - Finding the Lost Object Information

+0

@Edの答えは、コードとIDEにアクセスできる場合には素晴らしいです。読み解く価値のあるヨカイの答え。 –

関連する問題