web-dev-qa-db-ja.com

Visual Studio 2017で.NET 4.6フレームワークのソースコードをデバッグするにはどうすればよいですか?

私が試したものは次のとおりです。

Visual Studio 2017で新しいコンソールアプリ(.NET Framework)を作成しました。

次のコードを追加しました:

static void Main(string[] args)
{
    new Dictionary<int, int>().TryGetValue(3, out int x); //I want to step into TryGetValue() (this is just an example)
}

ここにリストされている設定を構成しました: https://blogs.msdn.Microsoft.com/sburke/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code/ =

確認済みのシンボルが[モジュール]ウィンドウに読み込まれます。

mscorlib.dllシンボルがロードされました。 4.6.1586.0作成者:NETFXREL2

試した:「ステップイン(F11)」

試した:「特定のステップに進む」| 「System.Collections.Generic.Dictionary.TryGetValue」

両方とも、単にラインを越えます。

ここで詳細を使用してVSを設定しようとしました: http://www.symbolsource.org/Public/Home/VisualStudio

同じ結果、デバッガーは行をステップオーバーします。

私はここで答えを見ました: https://stackoverflow.com/a/12432029/297451

ただし、このバージョンはセキュリティ更新プログラムではないようで、「site:support.Microsoft.com/kb 4.6.1586.0」を検索しても何も得られません。

私は何を間違えていますか?

18
Jon

これが答えです、ハンス・パッサンのおかげです。このソリューションでは、追加の質問が発生することに注意してください。

  1. https://referencesource.Microsoft.com/ に、デバッグしている正確なバージョンが含まれていることを確認します。

  2. ここで指定されているとおりにVisual Studioを構成します。 https://referencesource.Microsoft.com/setup.html

    • [マイコードのみを有効にする]のチェックを外します
    • 「.NET Frameworkソースのステップ実行を有効にする」にチェックマークを付けます(これが必要な唯一のステップであるはずです)。
    • 「ソースサーバーのサポートを有効にする」にチェックマークを付けます
    • 「元のバージョンと完全に一致するソースファイルが必要」のチェックを外します
  3. ソースインデックスが含まれた状態で、シンボルがモジュールウィンドウにロードされていることを確認します。

    • ソースインデックスが含まれているかどうかをどのように確認できますか?モジュールウィンドウは、PDBがソース情報を削除したかどうかを指定しません。

マイクロソフトは、静かに失敗するのではなく、有用なエラーメッセージを提供することにより、このプロセスをより堅牢にすることができました。

13
Jon

JetBrains dotPeekのSymbol Server機能を使用 。標準機能を機能させるのに苦労した後、私にとって魅力のように働きました:

  1. DotPeekを実行し、[ツール]> [オプション...]> [シンボルサーバー]に移動します。
  2. [すべてのアセンブリ]が選択されていることを確認し、ローカルシンボルサーバーのURLをクリップボードにコピーします。 [ツール]メニューでdotPeekシンボルサーバーをクリックして起動します。
  3. Visual Studioで、[ツール]> [オプション...]> [デバッグ]> [シンボル]に移動し、dotPeekサーバーのURLをリストに追加します。 dotPeekシンボルサーバーを可能な限りリストの最上部に移動し、リスト内の他のすべてのシンボルサーバーのチェックを外します(特に、「Microsoft Symbol Servers」および「NuGet.org Symbol Server」は選択されない)。
  4. デバッグを開始-フレームワークのソースコードにステップインしようとすると、dotPeekがアセンブリを逆コンパイルして作業を行い、ソースに移動します。

これが機能しない場合は、おそらくVisual Studioが以前にMicrosoft/NuGetから問題のアセンブリの「間違った」シンボルをダウンロードし、dotPeekに問い合わせる代わりにそれらを使用しているためです。これを確認するには、デバッグを開始し、モジュールリストで関連するアセンブリを見つけます([デバッグ]> [Windows]> [モジュール])-そのアセンブリの[シンボルファイル]の下に表示されるパスでPDBファイルを削除します、デバッグを再開すると、dotPeekが実行されます。

7
Phil Haselden