如何在 Visual Studio 2017 中调试 .NET 4.6 框架源代码?

How do I debug .NET 4.6 framework source code in Visual Studio 2017?

这是我试过的方法:

2017 年 Visual Studio 制作了一个新的控制台应用程序 (.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/

已确认符号已加载到模块中 window:

mscorlib.dll Symbols loaded. 4.6.1586.0 built by: NETFXREL2

尝试过:"Step Into (F11)"

尝试过:"Step into Specific" | "System.Collections.Generic.Dictionary.TryGetValue"

两者都刚刚越界。

我已经尝试使用此处的详细信息配置 VS:http://www.symbolsource.org/Public/Home/VisualStudio

同样的结果,调试器越界了。

我看过这里的答案:

但是这个版本似乎不是安全更新,搜索 "site:support.microsoft.com/kb 4.6.1586.0" 没有任何结果。

我做错了什么?

这是答案,感谢 Hans Passant。请注意,此解决方案会引发其他问题。

  1. 确保 https://referencesource.microsoft.com/ 包含您正在调试的确切版本。

    • 怎么样?参考源指定“.NET Framework 4.6.2”,但模块版本类似于:“4.6.1586.0”
    • 您可能需要按照此处的说明卸载安全更新:How do you enable "Enable .NET Framework source stepping"?
  2. 按照此处指定的方式配置 Visual Studio: https://referencesource.microsoft.com/setup.html

    • 取消勾选 "Enable Just My Code"
    • 勾选"Enable .NET Framework source stepping"(这应该是唯一需要的步骤)
    • 勾选"Enable source server support"
    • 取消勾选 "Require source files to exactly match the original version"
  3. 确认符号已加载到模块中 window,包括源索引。

    • 如何判断是否包含源索引?模块 window 未指定 PDB 是否已删除源信息。

Microsoft 可以通过提供有用的错误消息而不是默默地失败来使此过程更加可靠。

Use the Symbol Server feature in JetBrains dotPeek。在努力使标准功能正常工作后,对我来说就像一个魅力:

  1. 运行 dotPeek 并转到“工具”>“选项...”>“符号服务器”。
  2. 确保选择"All assemblies"并将本地符号服务器URL复制到剪贴板。通过在“工具”菜单中单击它来启动 dotPeek 符号服务器。
  3. 在 Visual Studio 中,转到工具 > 选项... > 调试 > 符号并将 dotPeek 服务器 URL 添加到列表中。尽可能将 dotPeek 符号服务器移到列表的最上方,并取消选中列表中的所有其他符号服务器(特别是,不得选择 "Microsoft Symbol Servers" 和 "NuGet.org Symbol Server").
  4. 开始调试 - 当您尝试进入框架源代码时,您会看到 dotPeek 正在为您反编译程序集,然后您将进入其源代码。

如果这不起作用,可能是因为 Visual Studio 之前从 Microsoft/NuGet 下载了相关程序集的 "wrong" 符号,并且正在使用它们而不是询问 dotPeek .要检查这一点,开始调试并在模块列表中找到相关程序集(调试 > Windows > 模块)- 删除该程序集 "Symbol File" 下显示的路径中的 PDB 文件,然后重新开始调试,dotPeek 应该开始运行。