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

Jon*_*Jon 19 .net c# debug-symbols visual-studio-debugging visual-studio-2017

这是我尝试过的:

在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)
}
Run Code Online (Sandbox Code Playgroud)

配置此处列出的设置: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"什么都不会产生任何结果.

我究竟做错了什么?

Jon*_*Jon 14

这是答案,感谢Hans Passant.请注意,此解决方案提出了其他问题.

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

  2. 按照此处的说明配置Visual Studio:https: //referencesource.microsoft.com/setup.html

    • 解开"启用我的代码"
    • 勾选"启用.NET Framework源步进"(这应该是唯一需要的步骤)
    • 勾选"启用源服务器支持"
    • 取消"要求源文件与原始版本完全匹配"
  3. 确认符号已加载到"模块"窗口中,并包含源索引.

    • 如何判断是否包含源索引?模块窗口未指定PDB是否已剥离源信息.

通过提供有用的错误消息而不是静默失败,Microsoft可以使此过程更加健壮.

  • 我刚刚安装了 .NET 4.7 Developer Pack 并在 Windows 10 上的 VS2017 中组合了一个解决方案。我已经尝试了所有这些说明,但无法进入 List&lt;string&gt; 排序。我真的看不到围绕此的安全更新。公平地说,我有点卡住了! (2认同)

Phi*_*den 7

在JetBrains dotPeek中使用符号服务器功能。在努力使标准功能正常工作之后,对我来说就像是一种魅力:

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

如果这不起作用,则可能是因为Visual Studio先前已从Microsoft / NuGet下载了相关程序集的“错误”符号,并使用了它们而不是询问dotPeek。要进行检查,请开始调试并在模块列表中找到相关的程序集(“调试”>“ Windows”>“模块”)- 在该程序集的“符号文件”下显示的路径处删除PDB文件,然后重新启动调试,dotPeek应该开始执行。

  • https://www.jetbrains.com/help/decompiler/Using_product_as_a_Symbol_Server.html (2认同)