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

45
我正在使用Visual Studio 2012。我想调试.NET Framework源代码。我尝试了几乎所有的选项,但仍然收到“There is source code available for Current Location”的错误提示。符号已经成功加载。我尝试了加载Microsoft Symbol Server并尝试了这个URLhttp://referencesource.microsoft.com/symbols。但我仍然无法进行DEBUG。我尝试了这些链接,http://blogs.msdn.com/b/sburke/archive/2008/01/16/configuring-visual-studio-to-debug-net-framework-source-code.aspxhttp://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源代码吗?


1
你在 Release 模式下构建项目有任何更改吗? - Shadow The Spring Wizard
5
下载 .NET Reflector 的免费试用版。安装并确保它也安装了 VS 2012 插件(VS 应该关闭)。然后按照他们的文档中的说明操作,使得作为引用但不属于您解决方案的程序集能够像已经包含在解决方案中一样进行调试。 - Eduard Dumitru
1
是的,我也关注了这个链接:http://blogs.msdn.com/b/dotnet/archive/2012/08/15/announcing-the-release-of-net-framework-4-5-rtm-product-and-source-code.aspx。 - Imran Qadir Baksh - Baloch
1
我遇到了同样的问题,按照说明操作没有起作用,尝试了所有设置仍然没有成功。 - Chris Herring
1
@ShadowWizard 他没有问题调试自己的源代码。但通常你会有一个高达一百层的调用堆栈,其中大部分是系统/.NET dll。通过符号调试,你仍然可以看到调用堆栈上(“外来”dll的)函数签名,但你想要看到至少实际的参数值,甚至更好的是:源代码。 - Csaba Toth
显示剩余15条评论
6个回答

9

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


3
具体是哪个特性出了问题?如果我们取消“要求源文件与原始版本完全匹配”的选项,那么pdb的不正确性就不应该占太大的比重。总的来说,符号调试功能和系统pdb处理在2008年->2010年->2012年得到了改进。但是,能够进入.NET源代码进行调试是一件不同的事情。 - Csaba Toth
1
事实上,普遍的共识似乎是这个特性已经坏了。 - David Ebbo
1
我认为这不是由于Visual Studio的版本或该功能无法工作的事实,而只是可用的唯一源(或PDB +源信息)是.NET RTM版本,而不是在那个神圣时刻之后持续发布的所有服务包和更新。@user626528-您有“替代解决方案”吗? - Simon Mourier
反射器不是很好的选择,因为您无法看到注释,有时逻辑结构在编译时被优化掉等。而且,反射器很昂贵,微软据说免费提供了更好的选项(正如我刚才所描述的)。 - BrainSlugs83
1
@BrainSlugs83,你可以尝试在全新的虚拟机安装上运行它。如果成功了,请告诉我们。 - user626528
显示剩余8条评论

9
.NET框架源代码调试长期存在问题。请参见VisualStudio UserVoice上相关建议:允许开发人员逐步浏览.NET Framework源代码。好消息是:它终于被修复了!请查看来自Microsoft的以下博客文章:

.NET Reference Source的新外观

简而言之:

它目前处于“beta”版本。最终将取代http://referencesource.microsoft.com/。Microsoft还承诺添加更多程序集的源代码。


1
它又被重新打破了吗?他们在http://referencesource.microsoft.com/setup.html上的步骤不起作用。 - NH.

7
在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,太棒了! - BrainSlugs83
哎呀,仔细想想,输出项目有很多奇怪的问题,缺少XML注释是一个相当大的问题... - BrainSlugs83

2

1

1) PDB文件不是最新的。尝试取消选中"工具"->"选项"->"调试"->"常规"->"要求源文件与原始版本完全匹配"

2) 您通过向引用中添加其DLL来引用另一个项目,而不是将该项目添加为引用。尝试删除引用并从"项目"选项卡中添加对该项目的新引用

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


1
我过去遵循SymbolSource建议的程序,运气很好。
如果再结合Resharper,你就可以通过CTRL点击框架。
然而,微软没有发布其二进制文件所有版本的代码的悠久历史。这就是为什么经常无法进行调试的原因。
尽管如此,Resharper似乎更灵活地下载源代码,如果无法下载,则会提供未调试的反汇编源代码。请注意,JetBrains认为反编译源代码的调试是dotPeek的关键功能(Re#附带的反编译器),因此在不久的将来可能是可能的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接