Debug Source Code in .NET Framework
摘要:一直以来有听说微软公开了.NET Framework的一些类,可以让我们通过VS2008进行调试查看,最近尝试了一下该功能,通过断点调试微软提供的源代码,总体感觉微软还是向开源迈开了一大步,不过感觉调试操作很麻烦而且只可以看不允许做出任何修改,那还不如通过反编译查看来的快捷。还有就是如果微软能把.NET Framework一些类图也自动生成出来那就是very good啦。
1.1.1基本设置
首先要确认您所使用Visual Studio 2008版本(Express versions除外)才具有调试.NET Framework源代码功能(最好先打sp1在安装)。
1)现在我们要下载一个补丁Visual Studio 2008 QFE,来更新VS2008中调试功能中的DLL文件。
2)接下来我们运行VS2008,然后选择工具->选项->调试->常规(Tools > Options > Debugging > General),接着我们修改常规中的设置如下:
取消选择“启用仅我的代码”(Enable Just My Code)
选择“启用源服务器支持”(Enable source server support)
图1调试中设置
3)接下来我们添加“符号”中的设置,首先设置符号文件的下载地址,输入一个URL地址http://referencesource.microsoft.com/symbols,然后我们再设置一个本地保存位置。然后选择“只在手动加载符号是搜索上述位置”。
图2符号中设置
1.1.2调试.NET Framework源代码
完成了上述简单的安装和设置之后,我们可以调试源代码了。让我们建一个简单的WinForm程序测试一下调试效果如何,添加代码如下而且当我们开始调试时候VS就会自动下载用于调试源代码dll文件。
图3下载调试dll文件
图4设置调试断点
当我们开始debug时候发现VS会变得很慢,这是由于我们要在从微软中下载.NET Framework提供的调试源代码。当下载完毕后我们就可以进入断点了。
接着我们要选择加载符号的位置,我们选择堆栈窗口的其中一个dll文件,然后右键选择加载符号,这里可以选择从网络上进行加载(很慢)或根据已经下载好的源代码文件地址进行调试。(选择本地加载)
图5选择加载符号方式
由于我已经加载了符号文件所以这里不用再设置了,现在我们按F11或可以直接点击堆栈窗口的dll文件就可以进入源代码调试了。
如果在堆栈窗口没有找到我们要进入的dll文件我们可以手动添加,例如我们在Form里面添加了Paint方法,但我们在堆栈窗口没有找到System.Drawing的dll文件,那么我们通过以下方法添加该dll文件。
图6手动添加dll文件
现在我们可以调试.NET Framework的源代码了,但是我们发现每次调试VS都会下载符号文件这使得VS运行的十分慢,这是由于我们每次调试都要重新从微软中加载符号文件,但我们已经把符号文件下载到本地保存起来了,还记得吗?我们在前面设置了从网上加载,那么我们可以关闭下载调试功能,从而改为使用本地文件进行调试即可。
前面提到我们要把微软提供的可调试dll文件都下载都本地,所以我们要确保一次过把调试文件都下载下来,结果我们只有对调试设置修改一下就OK了。
图7选择加载符号方式
现在我们重新调试程序,这次下载符号文件时间较长,因为这次会把微软提供可调试dll文件都下载到本地,而且文件大小有50MB,然后下载完毕之后VS会自动进入断点,接着我们停止调试,取消选择从微软下载符号文件,因为我们现在要使用本地符号文件进行调试。
图8取消选择
现在我们可以加载本地的调试文件进行调试,从而不影响VS的运行效率了。微软官方提供可调试dll文件如下,我相信以后微软还会提供给更多的可调试dll文件,我们现在不仅仅可以通过反编译器查看源代码,还可以断点调试源代码即使不能修改源代码:
-
Mscorlib.DLL
-
System.DLL
-
System.Data.DLL
-
System.Drawing.DLL
-
System.Web.DLL
-
System.Web.Extensions.DLL
-
System.Windows.Forms.DLL
-
System.XML.DLL
-
WPF (UIAutomation*.dll, System.Windows.DLL, System.Printing.DLL, System.Speech.DLL, WindowsBase.DLL, WindowsFormsIntegration.DLL, Presentation*.dll, some others)
-
Microsoft.VisualBasic.DLL
如果大家想了解更多可以查看Shawn Burke's Blog
关于作者:[作者]:
JK_Rush从事.NET开发和热衷于开源高性能系统设计,通过博文交流和分享经验,欢迎转载,请保留原文地址,谢谢。 |