Debug Source Code in .NET Framework (跟踪 debug .net 底层 dll)
2015-05-16 06:49
846 查看
摘要:一直以来有听说微软公开了.NET Framework的一些类,可以让我们通过VS2008进行调试查看,最近尝试了一下该功能,通过断点调试微软提供的源代码,总体感觉微软还是向开源迈开了一大步,不过感觉调试操作很麻烦而且只可以看不允许做出任何修改,那还不如通过反编译查看来的快捷。还有就是如果微软能把.NET Framework一些类图也自动生成出来那就是very good啦。
首先要确认您所使用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)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/ff2523f9bd91516d53b1cb82bcf86e58.jpg)
图1调试中设置
3)接下来我们添加“符号”中的设置,首先设置符号文件的下载地址,输入一个URL地址http://referencesource.microsoft.com/symbols,然后我们再设置一个本地保存位置。然后选择“只在手动加载符号是搜索上述位置”。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/6739911effed4810314855f5d6ee0845.jpg)
图2符号中设置
完成了上述简单的安装和设置之后,我们可以调试源代码了。让我们建一个简单的WinForm程序测试一下调试效果如何,添加代码如下而且当我们开始调试时候VS就会自动下载用于调试源代码dll文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/dde4901024cacb2ef25bb771513faeb2.jpg)
图3下载调试dll文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/9b8832f023f158c6e06c32c88816c723.jpg)
图4设置调试断点
当我们开始debug时候发现VS会变得很慢,这是由于我们要在从微软中下载.NET Framework提供的调试源代码。当下载完毕后我们就可以进入断点了。
接着我们要选择加载符号的位置,我们选择堆栈窗口的其中一个dll文件,然后右键选择加载符号,这里可以选择从网络上进行加载(很慢)或根据已经下载好的源代码文件地址进行调试。(选择本地加载)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/a9d1578923296de2741d2e2c7d1cb526.jpg)
图5选择加载符号方式
由于我已经加载了符号文件所以这里不用再设置了,现在我们按F11或可以直接点击堆栈窗口的dll文件就可以进入源代码调试了。
如果在堆栈窗口没有找到我们要进入的dll文件我们可以手动添加,例如我们在Form里面添加了Paint方法,但我们在堆栈窗口没有找到System.Drawing的dll文件,那么我们通过以下方法添加该dll文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/10daf62edf4500bfe6bf7263025d9dd7.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/02c0b76b600fd39dbbb0f1b5ce279cbf.jpg)
图6手动添加dll文件
现在我们可以调试.NET Framework的源代码了,但是我们发现每次调试VS都会下载符号文件这使得VS运行的十分慢,这是由于我们每次调试都要重新从微软中加载符号文件,但我们已经把符号文件下载到本地保存起来了,还记得吗?我们在前面设置了从网上加载,那么我们可以关闭下载调试功能,从而改为使用本地文件进行调试即可。
前面提到我们要把微软提供的可调试dll文件都下载都本地,所以我们要确保一次过把调试文件都下载下来,结果我们只有对调试设置修改一下就OK了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/27a315856643ce741cabae6a265b1729.jpg)
图7选择加载符号方式
现在我们重新调试程序,这次下载符号文件时间较长,因为这次会把微软提供可调试dll文件都下载到本地,而且文件大小有50MB,然后下载完毕之后VS会自动进入断点,接着我们停止调试,取消选择从微软下载符号文件,因为我们现在要使用本地符号文件进行调试。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/33e8ced95c83e1a62555b8d9a41e130d.jpg)
图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
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)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/ff2523f9bd91516d53b1cb82bcf86e58.jpg)
图1调试中设置
3)接下来我们添加“符号”中的设置,首先设置符号文件的下载地址,输入一个URL地址http://referencesource.microsoft.com/symbols,然后我们再设置一个本地保存位置。然后选择“只在手动加载符号是搜索上述位置”。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/6739911effed4810314855f5d6ee0845.jpg)
图2符号中设置
1.1.2调试.NET Framework源代码
完成了上述简单的安装和设置之后,我们可以调试源代码了。让我们建一个简单的WinForm程序测试一下调试效果如何,添加代码如下而且当我们开始调试时候VS就会自动下载用于调试源代码dll文件。![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/dde4901024cacb2ef25bb771513faeb2.jpg)
图3下载调试dll文件
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/9b8832f023f158c6e06c32c88816c723.jpg)
图4设置调试断点
当我们开始debug时候发现VS会变得很慢,这是由于我们要在从微软中下载.NET Framework提供的调试源代码。当下载完毕后我们就可以进入断点了。
接着我们要选择加载符号的位置,我们选择堆栈窗口的其中一个dll文件,然后右键选择加载符号,这里可以选择从网络上进行加载(很慢)或根据已经下载好的源代码文件地址进行调试。(选择本地加载)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/a9d1578923296de2741d2e2c7d1cb526.jpg)
图5选择加载符号方式
由于我已经加载了符号文件所以这里不用再设置了,现在我们按F11或可以直接点击堆栈窗口的dll文件就可以进入源代码调试了。
如果在堆栈窗口没有找到我们要进入的dll文件我们可以手动添加,例如我们在Form里面添加了Paint方法,但我们在堆栈窗口没有找到System.Drawing的dll文件,那么我们通过以下方法添加该dll文件。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/10daf62edf4500bfe6bf7263025d9dd7.jpg)
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/02c0b76b600fd39dbbb0f1b5ce279cbf.jpg)
图6手动添加dll文件
现在我们可以调试.NET Framework的源代码了,但是我们发现每次调试VS都会下载符号文件这使得VS运行的十分慢,这是由于我们每次调试都要重新从微软中加载符号文件,但我们已经把符号文件下载到本地保存起来了,还记得吗?我们在前面设置了从网上加载,那么我们可以关闭下载调试功能,从而改为使用本地文件进行调试即可。
前面提到我们要把微软提供的可调试dll文件都下载都本地,所以我们要确保一次过把调试文件都下载下来,结果我们只有对调试设置修改一下就OK了。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/27a315856643ce741cabae6a265b1729.jpg)
图7选择加载符号方式
现在我们重新调试程序,这次下载符号文件时间较长,因为这次会把微软提供可调试dll文件都下载到本地,而且文件大小有50MB,然后下载完毕之后VS会自动进入断点,接着我们停止调试,取消选择从微软下载符号文件,因为我们现在要使用本地符号文件进行调试。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202007/20/33e8ced95c83e1a62555b8d9a41e130d.jpg)
图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
相关文章推荐
- Configuring Visual Studio to Debug .NET Framework Source Code
- Configuring Visual Studio to Debug .NET Framework Source Code
- Configuring Visual Studio to Debug .NET Framework Source Code【from Shawn Burke's Blog】
- [转载]Configuring Visual Studio to Debug .NET Framework Source Code
- vs2008 debug with .net framework source code!
- Configuring Visual Studio to Debug .NET Framework Source Code
- vs2008 debug with .net framework source code!
- Configuring Visual Studio to Debug .NET Framework Source Code
- Configuring Visual Studio to Debug .NET Framework Source Code
- Configuring Visual Studio to Debug .NET Framework Source Code
- Configuring Visual Studio to Debug .NET Framework Source Code
- 由于内部错误,服务器无法处理该请求。有关该错误的详细信息,请打开服务器上的 IncludeExceptionDetailInFaults (从 ServiceBehaviorAttribute 或从 <serviceDebug> 配置行为)以便将异常信息发送回客户端,或打开对每个 Microsoft .NET Framework SDK 文档的跟踪并检查服务器跟踪日志。
- Source Code for the Built-in ASP.NET 2.0 Providers Now Available for Download !
- How to compile and debug VLC player source code in eclipse IDE on Ubuntu 10.04 (lucid)?
- [解决]ASP.NET MVC 4/5 源码调试(source code debug)
- How to debug ASP.NET MVC using source code
- 【原创】如何让SharePoint2010的内联代码支持.Net framework 3.5[How to embed inline code in aspx with .net framework 3.5 syntax]
- Releasing the Source Code for the .NET Framework Libraries
- Atlas Control Toolkit and Source Code for the Build-in Asp.Net 2.0 Providers