zoukankan      html  css  js  c++  java
  • 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

     

  • 相关阅读:
    调用tensorflow中的concat方法时Expected int32, got list containing Tensors of type '_Message' instead.
    lstm公式推导
    RNN推导
    word2vec原理
    反向传播神经网络入门
    mac升级系统自带numpy失败解决方案
    mac安装.net core
    mac 当前位置打开终端
    docker安装配置
    KVM性能优化学习笔记
  • 原文地址:https://www.cnblogs.com/rush/p/Debug_SourceCode_Framework.html
Copyright © 2011-2022 走看看