Debug Source Code in .NET Framework (跟踪 debug .net 底层 d

 摘要:一直以来有听说微软公开了.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地址,然后我们再设置一个本地保存位置。然后选择“只在手动加载符号是搜索上述位置”。

图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

可你仍然感谢天地和人世所带来的这些变化和发生。

Debug Source Code in .NET Framework (跟踪 debug .net 底层 d

相关文章:

你感兴趣的文章:

标签云: