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

时间:2017-03-09 10:56:39

标签: c# .net visual-studio-debugging debug-symbols 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)
}

配置此处列出的设置: 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”不会产生任何效果。

我做错了什么?

2 个答案:

答案 0 :(得分:13)

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

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

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

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

    • 如何判断是否包含源索引?模块窗口不指定PDB是否已剥离源信息。
  4. 微软可以通过提供有用的错误消息而不是静默失败来使这个过程更加健壮。

答案 1 :(得分:6)

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

  1. 运行dotPeek并转到工具&gt;选项......&gt;符号服务器。
  2. 确保&#34;所有组件&#34;选中并将本地符号服务器URL复制到剪贴板。通过在“工具”菜单中单击它来启动dotPeek符号服务器。
  3. 在Visual Studio中,转到工具&gt;选项......&gt;调试&gt;符号并将dotPeek服务器URL添加到列表中。将dotPeek符号服务器移动到尽可能高的列表中,并取消选中列表中的所有其他符号服务器(特别是&#34; Microsoft符号服务器&#34;&#34; NuGet.org符号服务器& #34;不得选择)。
  4. 开始调试 - 当你试图进入Framework源代码时,你会看到dotPeek正在为你做一些反编译程序的工作,然后你就会进入它的源头。
  5. 如果这不起作用,可能是因为Visual Studio之前已经下载了错误的&#34; Microsoft / NuGet中有关程序集的符号,并使用它们而不是询问dotPeek。要检查这一点,请开始调试并在模块列表中找到相关的程序集(Debug&gt; Windows&gt; Modules) - 删除&#34;符号文件&#34;中显示的路径下的PDB文件。对于那个程序集,然后重新启动调试,dotPeek应该开始行动。