42

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

現在、nullポインターが原因でアプリケーションがクラッシュしますが、エラーの原因となっているコードはありません。リリースモードではブレークポイントが無視されるように見えるので、エラーを見つける最良の方法を知りたいと思います。

4

2 に答える 2

77

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

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

  2. [リンカー]を展開し、[一般]ノードをクリックします。[インクリメンタルリンクを有効にする]を[いいえ](/ INCREMENTAL:NO)に設定します。

  3. デバッグノードを選択します。[デバッグ情報の生成]を[はい](/ DEBUG)に設定します。

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

    / OPT:REFが指定されている場合、/ OPT:ICFはデフォルトでオンになっています。

これは、Microsoftのドキュメントから直接リッピングされています。

私はこれを常に行っており、デバッグモードでデバッグすることはほとんどありません。ご存知のように、リリースビルドで発生する多くのエラーは、デバッグビルドでは発生しない可能性があります(ほぼ確実に、UBの呼び出しから発生するエラー)。

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

于 2012-06-28T21:44:35.797 に答える
7

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

最適化を使用してリリースされたC++プロジェクトをコンパイルすると、デバッガーが正しいオブジェクト情報を表示しない場合があります。

通常、ローカル変数が最初に実行され、多くの場合、このオブジェクトの情報はデバッガーに失われます。

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

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

C++でのリリースプロジェクトのデバッグ-失われたオブジェクト情報の検索

于 2016-07-25T13:21:06.227 に答える