如何使用Visual Studio 2017调试.NET Framework源代码?
关于这个主题,这里有一些关于stackoverflow的问题,但是即使阅读了所有这些问题,我仍然无法使其工作。 我认为,提出有关如何调试.NET Framework源代码的最新有效解决方案将很有用。
我想在不使用任何外部工具(例如dotPeek作为源服务器)的情况下解决该问题。
答案 0 :(得分:6)
首先,我使用 Microsoft Visual Studio Enterprise 2017版本15.9.7 并通过.NET Framework 4.7.2对它进行了测试。不过,我认为它应该以相同的方式在Community Edition上起作用。
采取的步骤:
转到“工具/选项/调试/常规”,然后执行以下设置:
转到“工具/选项/调试/符号”,然后:
从https://referencesource.microsoft.com/download.html网站下载您的项目所针对的.NET Framework版本的源代码。
将下载的存档(zip)文件解压缩到PC上的便捷路径。
调试您的应用程序;在要调试的.NET代码行中设置一个断点,并使用调试器进入所需的代码行。
注意:您的应用程序启动速度可能会变慢,因为它会从互联网上下载PDB。
按进入(默认情况下为F11)。如果您的设置正确,则会导致一些延迟(如果VS崩溃(如我的崩溃),请再次清空符号缓存)。最终,它将要求提供给定文件的来源,例如dictionary.cs
。
这里可能发生两件事:
whatever.cs
未找到,并且有一个链接显示为“ 浏览并找到任何内容。cs... ”。单击该链接。选择磁盘上相应的.cs文件(您可以在操作系统上搜索该文件)。
注意:我不得不多次重新启动VS,直到它在查找源时“没有崩溃”为止,这很可能是VS中的错误。
注意:由于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),每个人都可以添加可获得完整调试信息的文件和版本吗?