使用VS2013与.NET Reflector插件调试进入源代码

       背景:出于某种原因,我想在断点调试项目时进入某个.NET类的构造函数来弄清楚底层构造过程。幸运的是.NET Framework现在已经开源,并且VS2010+版本均支持调试进入.NET源代码,只需要简单的几步设置即可,详情参见如何调试.NET Framework源代码。然而这种方法只支持.NET 4.5.1+,碰巧我的项目采用的是.NET 2.0,所以按照上述方法报错“无可用源”。这时我看了一眼工具栏上的.NET REFLECTOR(作为一名专业.NET开发者,随身安装reflector应该是很正常的事吧:)),心想这玩意应该会有用。以往我只用它反编译某些第三方托管程序或查看类库源码,但不知道能否用它调试进入源代码。不过既然能够得到源代码,那么一定会有某种方法使得VS识别到源代码的位置,从而断点调试进去。说干就干:

工具自备:VS2013 Pro Update1 + .NET Reflector 9.0.1.374 Pro

首先我们来分析一下本地调试有源代码的项目时VS是如何找到源代码的。其实原理很简单,在生成debug版本程序时会默认生成一个完整符号文件(.pdb),这个符号文件中就存储有源代码的对应关系。在微软官方提供的调试.NET源码的步骤中我们也可以看出关键步骤是设置符号服务器以下载正确的符号文件,然后vs根据pdb文件中的源码信息下载相应的源代码,因为微软目前开源的.NET版本从4.5.1开始,所以调试低版本时会因为找不到源代码而报错。原理弄清楚后我们可以开始动手了。

  1. 打开VS并加载需要调试的项目
  2. 点击.NET REFLECTOR工具栏,选择Generate PDBs
  3. 在弹出的窗口选择想要调试进入的类库DLL(例如想要跟踪String初始化时的底层实现,则选择mscorlib;或者你的项目引用的第三方类库,则选择它),选择语言/版本(注意务必选择C#以及与项目对应的.NET版本)

  4. 点击Continue,经过几分钟的反编译后即可,对应的源码以及符号自动存储到Debug Store
  5. 打开VS的符号设置,可以看到新增了一个符号目录,即Debug Store,勾选。同时取消勾选所有的符号服务器

  6. 接下来我们就可以为所欲为了,这里以String为例,new一个字符串,设置断点,我们开始调试,右键-执行特定属性或方法-String.New

跳出加载符号的页面,打开调用堆栈-mscorlib-右键-加载符号,OK,我们已经进入了String的源代码,接下来就可以像调试本地项目一样为所欲为了:)

 

最后感谢国外网友Cory Plott的博客给了我很大帮助

猜你喜欢

转载自www.cnblogs.com/IntPtrZero/p/VS2013_Reflector_Debug.html