【发布时间】:2019-02-19 20:35:26
【问题描述】:
如何使用 Visual Studio 2017 调试 .NET 框架源代码?
stackoverflow 上有一些关于这个主题的问题,但即使阅读了所有这些问题,我仍然无法解决问题。 我认为提供一个关于如何调试 .NET 框架源代码的最新、有效的解决方案会很有用。
我想在不使用任何外部工具(例如 dotPeek 作为源服务器)的情况下解决它。
【问题讨论】:
如何使用 Visual Studio 2017 调试 .NET 框架源代码?
stackoverflow 上有一些关于这个主题的问题,但即使阅读了所有这些问题,我仍然无法解决问题。 我认为提供一个关于如何调试 .NET 框架源代码的最新、有效的解决方案会很有用。
我想在不使用任何外部工具(例如 dotPeek 作为源服务器)的情况下解决它。
【问题讨论】:
首先,我使用 Microsoft Visual Studio Enterprise 2017,版本 15.9.7 并通过 .NET Framework 4.7.2 对其进行了测试。不过,我认为它应该以同样的方式在社区版上运行。
采取的步骤:
转到工具/选项/调试/常规,然后执行以下设置:
转到工具/选项/调试/符号,然后:
从https://referencesource.microsoft.com/download.html 站点下载您的项目所针对的 .NET 框架版本的源代码。
将下载的存档 (zip) 文件解压缩到 PC 上的方便路径。
调试您的应用程序;在要调试的 .NET 代码行设置断点,然后使用调试器单步执行所需的代码行。
注意:您的应用程序可能会启动较慢,因为它会从 Internet 下载 PDB。
按进入(默认为 F11)。如果您的设置正确,这将导致一些延迟(如果您的 VS 崩溃(就像我的那样),Empty Symbol Cache 再次)。最终它将询问给定文件的来源,例如dictionary.cs。
这里可能会发生两件事:
whatever.cs 未找到,并且有一个链接显示“Browse and find whatever.cs...”。点击该链接。在你的磁盘上选择对应的.cs文件(你可以在操作系统上搜索该文件)。
注意:在寻找源代码时,我不得不多次重启 VS,直到它“没有崩溃”,这很可能是 VS 中的一个错误。
注意:由于VS会保存你输入的源文件路径,你可以停止调试或者重启VS;下次它也会起作用。 此外,您不必在框架内手动选择更多源文件,因为 VS 将使用您输入的源文件夹并在那里搜索源文件。
【讨论】:
mscorlib.dll 调试代码时才对我有效,但不适用于例如System.Core.dll。有谁知道它的解决方案吗?
许多人想知道为什么他们不能进入源代码,尽管他们确实如上所述设置了复选框。我也是。
由于您可以将 dotnet 源提取到任何位置,Visual Studio 无法了解它们,并且原因不能是源文件本身(为什么 Visual Studio 找不到文件)。
但有些 dll 是可浏览的,有些则不能(通过双击 Visual Studios 堆栈视图或上下文菜单 > 转到源代码)。这让我想到 .pdb 本身一定是原因。如果您查看一个有效的文件(例如记事本),您会在开头看到带有文件路径(源文件)的字符串列表。在文件中,这不起作用,文件立即以二进制数据开头。
由于某种原因,微软没有在每个构建过程中创建带有完整调试信息的 .pdb。但为什么不呢 - 好问题! g
简而言之:您必须搜索包含 FULL DEBUG INFORMATION 的文件(您想调试的)的 dll 版本。这也是上下文菜单禁用“转到源”的原因。 我在全局程序集缓存中临时替换此文件以进行调试。这对我有用。
这里是 PresentationFramework.dll 的一个例子 - 4.0.30319.298 => pdb 大小:1219 KB - 4.0.30319.18408 => pdb 大小:15.562 KB
也许有人可以创建一个公共数据库 (wiki),每个人都可以添加文件和版本,以获得完整的调试信息?
【讨论】: