VS 2010のウィンドウサービスc#プロジェクトをリリースモードでビルドしています。驚いた最初のチャンスは、リリースモードでもpdbファイルを作成していることでした。デバッグ用のプロセスをアタッチした後、デバッグシンボルをロードできませんでした。
私の質問は、デバッグモードとリリースモードの両方でpdbファイルがある場合、なぜ2つのコンパイルモードが必要なのかということです。
VS 2010のウィンドウサービスc#プロジェクトをリリースモードでビルドしています。驚いた最初のチャンスは、リリースモードでもpdbファイルを作成していることでした。デバッグ用のプロセスをアタッチした後、デバッグシンボルをロードできませんでした。
私の質問は、デバッグモードとリリースモードの両方でpdbファイルがある場合、なぜ2つのコンパイルモードが必要なのかということです。
私の質問は、デバッグモードとリリースモードの両方でpdbファイルがある場合、なぜ2つのコンパイルモードが必要なのかということです。
デバッグとリリースの間には、PDB生成以外の違いがあります。Buildプロパティに移動し、「Advanced」に移動すると、生成されるデバッグ情報のレベルが異なります。Full、PDBのみ、およびNoneです。
さらに、コンパイル時の最適化にはさまざまなレベルがあり、さまざまなプリプロセッサシンボルが存在します(たとえば、それぞれDebug.Assert
が存在するか存在しないか)。
もちろん、さまざまなオプションを使用して、独自のさまざまなビルド構成を使用することもできます。
PDBファイルの作成とは関係なく、デバッグ/リリースモードが存在する理由はたくさんあります。
VSは、リリースモードでコンパイル済みプログラムをより高速に実行します。さらに、デバッグモードとリリースモードの場合にプログラムの動作を変更できるコンパイラ指令があります。たとえば、コンパイラ指令を使用して最上位try
catch
ブロックを無効にし、特定のコード行にスローされている例外を分離できるようにすることができます。
これはほんの一例です。つまり、デバッグモードには、PDBファイルを作成するだけでなく多くの目的があります。
3つ以上のコンパイルモードを使用できます。通常、デバッグとリリースの意味は、最適化が必要かどうかを表します。とにかく、デバッグ情報を生成することはできますが、リリースビルド用のPDBだけはあまり役に立ちません。インライン関数、変数を除外することができます。
私は最近winupdate(20120508)を実行しましたが、Visual Studioのデバッグは非常に遅く、コンパイルから実行までの遅延が1分遅れ、デバッグプログラムが終了すると、VisualStudioの制御を再び取得するためにさらに1分遅れたようです。私はすべてをきれいにしましたが、喜びはありませんでした。
解決策:プロジェクト/ソリューションの*.sdfファイルと*.suoファイルを手動で削除して再構築しました。問題は魔法のように消えました。
理由はわかりませんが、何かが同期していないか、破損しているか、アップデートと互換性がなく、手動で吹き飛ばす必要がありました。