如何调试到.NET Framework源代码

时间:2019-02-19 20:35:27

标签: c# .net debugging

如何使用Visual Studio 2017调试.NET Framework源代码?

关于这个主题,这里有一些关于stackoverflow的问题,但是即使阅读了所有这些问题,我仍然无法使其工作。 我认为,提出有关如何调试.NET Framework源代码的最新有效解决方案将很有用。

我想在不使用任何外部工具(例如dotPeek作为源服务器)的情况下解决该问题。

2 个答案:

答案 0 :(得分:6)

首先,我使用 Microsoft Visual Studio Enterprise 2017版本15.9.7 并通过.NET Framework 4.7.2对它进行了测试。不过,我认为它应该以相同的方式在Community Edition上起作用。

采取的步骤:

  1. 转到“工具/选项/调试/常规”,然后执行以下设置:

    • 选中启用.NET Framework源代码步进(这将自动禁用“启用我的代码” ;否则,请手动执行)
    • 取消选中要求源文件与原始版本完全匹配
    • 选中启用源服务器支持
  2. 转到“工具/选项/调试/符号”,然后:

    • 在上方列表框中,选中 Microsoft Symbol Servers
    • 点击空符号缓存按钮(以确保获得正确的符号)
    • 选择加载所有模块,除非排除位于底部的单选按钮
  3. https://referencesource.microsoft.com/download.html网站下载您的项目所针对的.NET Framework版本的源代码。

  4. 将下载的存档(zip)文件解压缩到PC上的便捷路径。

  5. 调试您的应用程序;在要调试的.NET代码行中设置一个断点,并使用调试器进入所需的代码行。

注意:您的应用程序启动速度可能会变慢,因为它会从互联网上下载PDB。

  1. 进入(默认情况下为F11)。如果您的设置正确,则会导致一些延迟(如果VS崩溃(如我的崩溃),请再次清空符号缓存)。最终,它将要求提供给定文件的来源,例如dictionary.cs。 这里可能发生两件事:

    • A)它在文件对话框中询问源文件(.cs)。转到步骤7。
    • B)它说whatever.cs未找到,并且有一个链接显示为“ 浏览并找到任何内容。cs... ”。单击该链接。
  2. 选择磁盘上相应的.cs文件(您可以在操作系统上搜索该文件)。

注意:我不得不多次重新启动VS,直到它在查找源时“没有崩溃”为止,这很可能是VS中的错误。

  1. 如果一切操作正确,您将发现自己正在调试.NET源代码。

注意:由于VS保存了您为源文件输入的路径,因此可以停止调试或重新启动VS。下次也可以使用。 此外,您不必不必在框架内手动选择任何其他源文件,因为VS将使用您输入的源文件夹并在其中搜索源文件。

答案 1 :(得分:1)

许多人想知道为什么他们确实如上所述设置了复选框,但为什么不能进入源代码。我也是。

因为您可以将dotnet源提取到任何位置,所以Visual Studio无法知道它们,原因也不能是源文件本身(为什么Visual Studio找不到文件)。

但是有些dll是可浏览的,有些则不是(通过双击Visual Studios堆栈视图或上下文菜单> goto源代码)。这使我想到了.pdb本身必须是原因。如果查看有效的文件(例如记事本),则会在开始时看到带有文件路径(源文件)的字符串列表。在无效的文件中,文件立即以二进制数据开头。

由于某种原因,Microsoft不会在每个构建过程中都创建带有完整调试信息的.pdb文件。但是为什么不呢?-好问题! g

简而言之:您必须搜索包含完整调试信息的文件的dll版本(您想调试)。这也是上下文菜单禁用“ goto source”的原因。 我将在全局程序集缓存中临时替换此文件以进行调试。这对我有用。

这里是PresentationFramework.dll的示例 -4.0.30319.298 => pdb大小:1219 KB -4.0.30319.18408 => pdb大小:15.562 KB

有人可能会创建一个公共数据库(wiki),每个人都可以添加可获得完整调试信息的文件和版本吗?