26

Visual Studio 2010 で「参照してソースを検索」が有効になるのはいつですか? (下記参照)

ここに画像の説明を入力してください

さらに、 http://referencesource.microsoft.com/からダウンロード済みのソース コード ファイルを参照できるように、有効にしたいと考えています。

Microsoft は常に最新のパッチと同時にPDB /ソース コードをリリースするとは限らないため、これは便利です。したがって、たとえば DateTime に足を踏み入れたい場合、DateTime を含まない最新のパッチについてはまったく気にしません。http://referencesource.microsoft.com/からダウンロードしたコードを参照したいだけです。

いくつかの調査の後、PDB ファイルの内容を表示するための便利なツールであるdia2dumpを見つけました。(中にありますC:\Program Files (x86)\Microsoft Visual Studio 10.0\DIA SDK\Samples\DIA2Dump\

.NET Framework のステッピングを使用して、DateTime などのソース コードが表示されない場合、mscorlib.pdb実際にファイルがダウンロードされるようです。

しかし、dia2dumpで内部を調べると、ソース ファイルのマッピングが含まれていません。つまり、最初のアイデアのようにソース コードを参照できたとしても、ソース ファイルのマッピングや関数の開始アドレスがなく、多くのものが欠落しているため、機能しないからです :(

ここでの解決策は、.NET Reflector Pro を使用するか、仮想マシンを手元に置いておき、ソース コードを含むフレームワークのリリースを使用して更新を無効にすることだと思います。

4

3 に答える 3

29

序章

通常、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 を無効にすることができます。
于 2011-05-18T16:28:52.750 に答える
0

記事「 .NETFramework4.0ソースコードへのステップイン」を確認してください。

「利用可能なソースがありません」画面が表示された場合は、「参照してソースを検索」を押して、ソースディレクトリで必要なファイルを見つけてください。あなたはおそらくそれを見つけるためにファイル検索を使用する必要があるはずです。これは1回だけ実行されます。これ以降、Visual Studioはこの場所を記憶し、不足しているソースファイルを検索するためです。

私はそれがあなたが探しているものについてであることを願っています。

于 2011-05-17T13:32:01.157 に答える