序章
通常、Visual Studio からビルドを行うと、実行可能ファイルのほかにPDBファイルも取得されます。このファイルは..bin\Debug
または..bin\Release
ディレクトリにあります。この PDB ファイルは、アセンブリ内のソース コード行と実行可能コードへのマッピングを保持します。また、ビルドが行われたソース コード ファイルの元の場所は、PDB ファイル内に保存されます。これは、単一のファイルが にあるクラス ライブラリを構築するとG:\ClassLibrary\Class1.cs
、このパスが 内に格納されることを意味しますClassLibrary.pdb
。これらすべてから覚えておくべき重要なことは、PDB ファイルがないと、ソース コードのステップイン デバッグを行うことができないということです。
実際のシナリオ
G:\ClassLibrary1
では、クラス ライブラリ用に自分の drive でビルドを行うとします。
ClassLibrary.dll
およびClassLibrary.pdb
ファイルを提供するか、ソース管理からチェックアウトして取得します。
プロジェクトで を参照しClassLibrary.dll
、ライブラリのクラスを使用します。
ライブラリからクラス コードにステップ インしようとすると、次のようになります。
Visual Studio は、いくつかの場所でClassLibrary.pdb ファイルを見つけようとします。
1.1 見つからない場合は、「参照してソースを検索」無効ページが表示されます。有効な PDB ファイルがないとデバッグできないことに注意してください。
1.2 PDB ファイルが見つかった場合、PDB ファイル内を調べて、Class1.cs
最初にビルドされたものをデバッグしようとしていることを確認します。
G:\ClassLibrary1\Class1.cs
コンピューターでそのファイルを探します。
1.2.1 見つかった場合は、コードに自動的にステップ インします。
1.2.2 見つからない場合は、次のダイアログが表示されます。

[キャンセル] を押すと、「利用可能なソースがありません」というメッセージが表示され、この場合、「参照してソースを検索」が有効になります。

なんで?有効な PDB ファイルがありますが、Visual Studio は、コンピューター上の ClassLibrary1 のソース コードがどこにあるのか、またはコンピューター上にあるかどうかさえ認識できない可能性があります。そのため、Visual Studio をソース コード ファイルの正確な場所に指定できるように、ダイアログ -> が表示されます。
最終的な注意事項
では、参照してソースを見つける機能が無効になったらどうしますか?
Visual Studio で、メニューDebug -> Windows -> Call stackを開きます。
一番上の call stak 命令を右クリックし、[Symbol Load Information] を選択します。Visual Studio が有効な PDB ファイルを見つけようとした場所が表示されます。
- 1.a 「PDB ファイルが見つからないか、開けません」というメッセージしか表示されない場合は、これらの場所のいずれかに有効な PDB ファイルを置きます。(メッセージを表示するには、右にスクロールする必要がある場合があります) デバッグを停止して、再度開始します。
- 1.b 「PDB がイメージと一致しません」というメッセージが表示される場合は、次のことを意味します。Visual Studio は PDB ファイルを見つけましたが、それは別のビルド用です。ClassLibrary1.dll をビルドして提供し、コードを 1 行も変更せずに再度ビルドして PDB を提供し、デバッグしようとする
classLibrary1.dll
と、このメッセージが表示されます。アセンブリとその PDB ファイルは、まったく同じビルドのものである必要があります。そうでない場合、このメッセージが表示されます。(このチェックは、ビルドを行うたびに、アセンブリと PDB ファイル内にある一意の番号を使用して行われます)
- 1.c 「シンボルが読み込まれました」というメッセージが表示されますが、「参照して検索」が無効になっています。これは、お持ちの PDB ファイルがステップイン デバッグに適していないことを意味します。使用しようとしている一部の PDB ファイルには、ステップイン デバッグに必要なすべての情報が含まれていません。高度なビルド設定のどこかからこれを制御できると思いますが、ビルドを行うたびに使用可能な PDB ファイルを生成したいので、試していません。この状況は、 .NETのソース コードをデバッグしようとするとよく発生します。フレームワーク自体と Microsoft はソース コードに使用可能な PDB ファイルを入れていませんが、代わりに Microsoft はステップイン デバッグに使用できない PDB ファイルをいくつか入れています。これは、Microsoft が .NET Framework ソース コードに更新 (パッチ) を頻繁に行うため、思ったよりも頻繁に発生します。これらの更新プログラムは、 Windows Updateを介してコンピューターにサイレント インストールされます。昨日は .NET Framework ソース コードをデバッグできたのに、今日はできないことに驚きます。通常、最新のコードの有効な PDB ファイルが配置されるまで、しばらく時間がかかります。この場合、.NET Reflector Pro のステップ デバッグ機能、または使用可能な PDB ファイルを備えた .NET フレームワーク バージョンを持つ仮想マシンを使用して、そのマシンで Windows Update を無効にすることができます。