web-dev-qa-db-ja.com

Visual Studio2010の「参照してソースを検索」

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

Enter image description here

さらに、 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を使用するか、仮想マシンを手元に置いて、ソースコードを含むフレームワークのリリースで更新を無効にすることだと思います。

26
Liviu Trifoi

前書き

Visual Studioからビルドを実行するときは常に、通常、実行可能ファイルのほかに [〜#〜] pdb [〜#〜] ファイルも取得します。このファイルは、..bin\Debugまたは..bin\Releaseディレクトリにあります。このPDBファイルは、アセンブリ内のソースコード行と実行可能コードへのマッピングを保持します。また、ビルドが行われたソースコードファイルの元の場所は、PDBファイル内に保存されます。これは、G:\ClassLibrary\Class1.csにある単一のファイルを持つクラスライブラリを構築する場合、このパスはClassLibrary.pdb内に格納されることを意味します。これらすべてから覚えておくべき重要なことは、PDBファイルがないと、ソースコードのステップインデバッグを実行できないということです。

実際のシナリオ

したがって、クラスライブラリ用にドライブG:\ClassLibrary1でビルドを実行するとします。

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見つからない場合は、次のダイアログが表示されます。

Browse to source file

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

Enter image description here

どうして?有効なPDBファイルがありますが、Visual Studioは、ClassLibrary1のソースコードがコンピューターのどこにあるのか、またはコンピューターのどこにあるのかさえわからない可能性があるためです。そのため、ダイアログが表示されたので、VisualStudioでソースコードファイルの正確な場所を指定できます。

最終メモ

では、ソースが無効になっていることを確認するために参照を取得したら、どうしますか?

Visual Studioで、メニューDebug->Windows->スタックを呼び出す

一番上のコールスタック命令を右クリックして、「シンボルロード情報」を選択します。 VisualStudioが有効な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が.NETFrameworkのソースコードを更新(パッチ)することが多いため、これは思ったよりも頻繁に発生します。これらの更新プログラムは、 Windows Update を介してコンピューターにサイレントインストールされます。昨日は.NET Frameworkのソースコードをデバッグできましたが、今日はデバッグできないことに驚いています。通常、最新のコード用の有効なPDBファイルを配置するまでに時間がかかります。この場合、 。NET Reflector Proステップデバッグ機能、または使用可能なPDBファイルを含む.NET Frameworkバージョンを持つ仮想マシンを使用して、そのマシンでWindowsUpdateを無効にすることができます。
26
Liviu Trifoi

記事をチェックしてください。NET Framework 4.0ソースコードへのステップイン

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

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

0
Reniuz