在 Visual Studio 2012 中调试 .NET Framework 源代码?

Posted

技术标签:

【中文标题】在 Visual Studio 2012 中调试 .NET Framework 源代码?【英文标题】:Debug .NET Framework Source Code in Visual Studio 2012? 【发布时间】:2013-02-17 14:33:25 【问题描述】:

我正在使用 Visual Studio 2012。我想调试 .NET Framework 源代码。我已经尝试了几乎所有选项,但我仍然收到There is source code available for Current Location。符号已成功加载。我已经尝试加载 Microsoft Symbol Server 并尝试了这个 url http://referencesource.microsoft.com/symbols。但我仍然无法调试。我试过这些链接,http://blogs.msdn.com/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspx 和 http://msdn.microsoft.com/en-us/library/cc667410.aspx

也跟着这个,http://blogs.msdn.com/b/dotnet/archive/2012/08/15/announcing-the-release-of-net-framework-4-5-rtm-product-and-source-code.aspx

有人可以在 VS 2012 中调试 .NET Framework 源代码吗?

【问题讨论】:

Release模式下构建项目有什么变化吗? 下载.NET Reflector的免费试用版。安装它并确保它还安装了 VS 2012 插件(VS 应该关闭)。然后按照他们文档中关于如何制作的说明进行操作,以便不属于您的解决方案的引用程序集可以调试,就好像它是... 是的,我也关注了这个,blogs.msdn.com/b/dotnet/archive/2012/08/15/… @Matt 你是在调试 .NET 框架代码还是只是你的代码 我也遇到了同样的问题,按照说明操作还是不行,玩了所有的设置还是不行 【参考方案1】:

调试 .NET Framework 源代码被破坏了很长时间。请参阅 VisualStudio UserVoice Allow developers to step through .NET Framework sources 上的相关建议。好消息:终于修好了!请参阅 Microsoft 的以下博客文章:

A new look for .NET Reference Source

简而言之:

用于浏览源的新 Web 界面:http://referencesource-beta.microsoft.com/ 所有源,包括项目文件,都可以直接下载:http://referencesource-beta.microsoft.com/download.html(虽然不可编译) 有一个新的 F12 导航扩展:http://visualstudiogallery.msdn.microsoft.com/f89b27c5-7d7b-4059-adde-7ccc709fa86e 源始终是最新的,调试不会因补丁和更新而中断。

目前是“测试版”。最终它将取代http://referencesource.microsoft.com/。微软还承诺添加更多程序集的来源。

【讨论】:

又被破解了吗?他们在referencesource.microsoft.com/setup.html 的步骤不起作用。【参考方案2】:

此功能在 VS2010 SP1 中被破坏,它也可能在 VS2012 中被破坏。或者,Microsoft 可能会为最新的 .NET Framework 版本发布不正确的 PDB 文件(以前发生过这种情况)。尝试替代解决方案。我正在使用 .NET Reflector VSPro - 它允许反编译程序集,在调试期间加载反编译的符号,并为这些反编译的程序集使用完整的调试功能。

【讨论】:

究竟是什么功能被破坏了?在我们取消选中“要求源文件与原始版本完全匹配”之后,pdb 的不正确性应该不会太多。总的来说,符号调试功能和系统 pdb 处理在 2008->2010->2012 年有所改进。但是这件事:调试到 .NET 源代码是不同的。 问题名称中的特征。 确实,普遍的共识似乎是该功能已损坏。 我不认为这是由于 Visual Studio 的版本,或者该功能不起作用的事实,它只是唯一可用的源(或 PDB+源信息)用于 . NET RTM 版本,而不是在那个冬青时间点之后连续发布的所有服务包和更新。 @user626528 - 你有“替代解决方案”吗? @BrainSlugs83,呃,你可以尝试让它在全新的 VM 安装上运行。如果你有任何运气 - 现在让我们。【参考方案3】:

在 VS 2008 中,我能够调试 .Net 源代码,但在 VS2012 中,我安装了 .NET Reflector(VS 扩展),因此它会自动反编译并允许调试任何 .Net 代码。

另一个开源工具是 ilspy.net ,它将反编译的程序集保存为 C# 项目,您可以使用调试工具。

还有一些适用于 Windows 的调试工具,它们是 SDK 的一部分,但我还没有尝试过:http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx

【讨论】:

我没有意识到 ILSpy 可以输出整个 CSPROJ,NEAT! 嗯,第二个,输出项目有很多奇怪的问题,缺少 XML cmets 是一个相当大的问题......【参考方案4】:

这是一篇很好的文章,描述了如何配置 VS 符号服务器和 dotPeek 1.2 以从 VisualStudio 调试反编译代码:http://blog.jetbrains.com/dotnet/2014/04/09/introducing-dotpeek-1-2-early-access-program 如果调试框架或其他编译代码是您的日常工作,我建议您从您使用的程序集重新构建解决方案,这将节省调试器附加期间符号加载的时间。

【讨论】:

【参考方案5】:

1) PDB 文件不是最新的。尝试取消勾选Tool->Options->Debugging->General->“Require source files to fully match the original version”

2) 您引用了另一个项目,方法是将其 dll 添加到您的引用中,而不是将项目添加为引用。尝试删除引用添加从“项目”选项卡中添加对项目的新引用

你可以搜索Google。它提供的不仅仅是答案

【讨论】:

【参考方案6】:

按照 SymbolSource 的建议,我过去在 the procedure 之后很幸运。

如果您将它与 Resharper 结合使用,您将能够按住 CTRL 键单击整个框架。

有 a long history 但是 MS 没有发布其二进制文件的所有版本的代码。这就是为什么调试经常不起作用的原因。

不过,Resharper 在下载源代码方面似乎更灵活一些,如果不能,它会为您提供反汇编的源代码,但无法调试。请注意,JetBrains 考虑调试反编译源 a critical feature for dotPeek(Re# 附带的反编译器),因此在不久的将来可能会实现。

【讨论】:

以上是关于在 Visual Studio 2012 中调试 .NET Framework 源代码?的主要内容,如果未能解决你的问题,请参考以下文章

在 Visual Studio 2012 中调试 .NET Framework 源代码?

Visual Studio 2012 中的远程调试

Visual Studio 2012 分析远程调试过程

在 Visual Studio 2012 中调试 C++ 代码时跳过 STL 代码?

visual studio 2012如何调试和运行程序?

在 Visual Studio 2012 Express 中设置 C++ 调试环境