使用.NET Reflector单步调试编译好的程序集

对于没有任何源代码和PDB文件的预编译程序集而言,如果没有合适的工具,调试起来并不容易。使用Red Gate的.NET Reflector可以在Visual Studio中即时反编译程序集,然后像调试有源代码的程序集一样单步跟踪它。

大家需要了解.NET Reflector(在VS和VSPro版本中)是可以集成到Visual Studio中的。标准的内置对象浏览器只显示公有方法和类(见图1),而.NET Reflector的对象浏览器(见图2)可以对编译好的程序集进行更为深入的分析,可以让用户浏览内部类、方法和代码。Red Gate .NET Reflector的Visual Studio插件能够进行即时反编译。要调试编译好的程序集,用户可以在解决方案浏览器窗口中右击一个程序集,并选择“Enable debugging”选项。.NET Reflector首先会尝试定位本机上的PDB文件,如果没有则会自己创建PDB文件,然后用户就可以单步调试程序集代码、设置断点并使用常规的调试技术了(见图4)。

(单击图片以放大)

图1 内置的对象浏览器

(单击图片以放大)

图2 .NET Reflector对象浏览器

图3 启用对编译好的程序集进行调试的支持

(单击图片以放大)

图4 调试编译好的程序集

在Visual Studio中有了这种工具,在诊断第三方程序库问题上花费的时间将会大大减少。

InfoQ记者Jonathan Allen写到,

“在多团队合作的项目中,我经常收到其他咨询公司发来的编译好的程序集,但是没有源代码。如果另一个团队在国内的另一头,甚至是世界的另一边,光交流可能就要花掉我一天或更多的时间。我尝试使用Reflector的调试器支持,并被它的表现震惊了。我能够自己诊断问题,花不了多少时间就能让测试服务器启动并运行起来。

只有两点我不太满意。首先,它不能处理C++ CLI程序集。碰到这种程序集时,我只能使用JetBrain的dotPeek。其次,在没有解决方案文件的情况下进行调试时,没有一个明确的方式可以让我打开任意程序集文件。我能够很轻松地附到一个运行的进程上,但真正要看什么时,还需要触发一个异常。然后通过异常我才能在栈中上下定位,并在实际需要的地方设置断点。”

.NET Reflector是通过一系列插件进行支持的,而且最近Red Gate也将流行的插件PowerCommands(该插件由Jason Haley提供)直接集成了进去(图5)。

图5 PowerCommands

Red Gate .NET Reflector是商业软件。它会定期更新以保持与新技术和新工具的同步。7月22日,.NET Reflector 7.6.0.808版本已提供下载

Sergey Barskiy,作为一个有多年Reflector使用经验的.NET开发者,他写到,

“当7.6版本发布时,我非常激动。这个版本会提供对新技术的支持。当时微软发布了大量激动人心的产品和技术——Windows 8和WinRT库、Visual Studio 2012、.NET 4.5和带有新的异步功能的C# 5。这些新技术Reflector 7.6全部都支持。”

2011年3月14日,随着.NET Reflector 7的发布,Red Gate使它成为了一个商业化产品,该公司的几个竞争对手随即免费发布了他们的软件,其中包括JetBrains DotPeekTelerik JustDecompileILSpyCodeReflect

JetBrains DotPeek(见图6)是最先进的.NET反编译器之一。它生成的代码质量很高,它还会尝试到源代码服务器上抓取代码。DotPeek的导航功能和快捷键非常便捷。它还能精确查找符号的使用,同时支持插件。DotPeek不能与Visual Studio集成。

(单击图片以放大)

图6 DotPeek

Telerik JustDecompile是一个免费的.NET反编译器,但是有商业化支持。它生成的代码质量也很高。它可以为反编译程序集得到的代码创建一个项目。JustDecompile提供了健壮的查找功能,能够支持全文查找和符号使用查找。它还有一个插件系统,目前在Telerik的网站上有两个可用的扩展。JustDecompile不能与Visual Studio集成。

(单击图片以放大)

图7 JustDecompile

(单击图片以放大)

图8 JustDecompile的查找对话框

ILSpy是唯一免费且开源的.NET反编译器,它基于MIT许可证发布。ILSpy的代码生成和语法高亮功能做的非常好。对于反编译的程序集,它既可以将其保存在一个文件中,也可以为所有文件创建一个项目。ILSpy是一个独立的工具,没有Visual Studio集成。

(单击图片以放大)

图9 ILSpy

CodeReflect相对于其他免费的或者商业的竞争产品,并没有增加什么功能。它是一个商业性维护的.NET反编译器,特性集相对简单,没有多余的功能。它提供了非常基本的代码生成与语法高亮功能。它不能保存文件或创建项目。用户只能将它反编译生成的代码复制出来。当然它也不能与Visual Studio 集成。

(单击图片以放大)

图10 CodeReflect

不管用户是否愿意为Visual Studio集成花钱,他们总可以在市场上找到合适的免费或付费的.NET反编译器。

查看英文原文http://www.infoq.com/news/2012/08/precompiled-net-reflector

 

时间: 2024-08-31 11:09:42

使用.NET Reflector单步调试编译好的程序集的相关文章

vs2012小问题-VS2012编译不报错,但是单步调试的时候查看变量值,显示这个变量是未声明的标识符

问题描述 VS2012编译不报错,但是单步调试的时候查看变量值,显示这个变量是未声明的标识符 void CGPRS2012Dlg::OnOncommMscomm1() { // TODO: 在此处添加消息处理程序代码 Sleep(300); VARIANT variant_inp; COleSafeArray safearray_inp; CString strtemp; long len,k; byte rxdata[1000]; for (int i=0;i<1000;i++) { rxda

VC++ 6.0 单步调试【写给自己看的调试总结帖】

写给自己看的调试总结帖 参考一: 先将光标移动到你需要停止的地方,点击一下工具栏中的小手工具,这个时候左边会有一个红色的圆点出现,然后点击"go F5"工具.程序会开始运行,直到运行到你设置的断点处停下来,这个时候你可以在下边的出口中检查你的变量的值 了.如果下面没有你需要的变量,你可以将变量名拖到变量窗口中. 如果你的变量窗口没有显示,你可以通过菜单-->查看-->调试窗口--->watch 打开它. 参考二: 逐过程调试-F10 逐语句调试-F11 跳到光标处-C

单步调试-有关DEVC++操作的问题

问题描述 有关DEVC++操作的问题 请问各位大神,DEVC++可以像VC++6.0一样单步调试吗?谢谢! 解决方案 可以 参考http://wenku.baidu.com/link?url=8e-dhQzMzWnhTldQUa9tCLHEEH6zkkHd1DXdHdVdrti-cgq7HFPS9a0muzWj9tefSvVk2F6it3YZKNDdbMkUBHKnIpAqMqGnmDV9fPit7Mq 解决方案二: 但是最好还是用Visual Studio,比别的IDE好太多了. 解决方案三:

GDB单步调试基础

最近全面换成 Linux 平台了,感觉如果不玩游戏 Linux 桌面基本可以替代 Windows 了,但是调试器这个还是问题,gdb可以解决这个问题. 一.GDB 概述 GDB 是 GNU 开源组织发布的一个强大的 UNIX 下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC . BCB 等 IDE 的调试,但如果你是在 UNIX 平台下做软件,你会发现 GDB 这个调试工具有比 VC . BCB 的图形化调试器更强大的功能.所谓 " 寸有所长,尺有所短 " 就是这个道理

VC++6.0-在Release下实现单步调试_VC技术文章_VC_软件编程

 我在一些编程论坛上,经常看到有人问我的程序在Debug下是好的,可是到Release就挂掉了,或者在Release下是好的,但是在Debug下挂 掉了之类的问题,其实这种问题最好解决,因为只要一单步跟踪,查看它的调用堆栈,和函数调用顺序,错误就一览无余了.通常错误要么是对空指针进行操作,要 么是释放的那块内存已经不是当初申请的不一样大了,要么一次申请的内存调用了多次delete等等-- 所以会编程序的人,首先要掌握的一门技术就是调试.可以说不会调试就等于不会编程. VC++6.0自带了非常好的

一步一步SharePoint 2007之二十八:实现WebPart的单步调试

摘要 前面的文章中,我们实现了两个WebPart的联动过程,至此,我们基本上就能编写无限复杂的WebPart 了. 在编写WebPart,尤其是非常复杂的WebPart的过程中,有时候出了错误,却又不知道是什么原因,这 时,找到原因的最好办法是单步调试. 本篇文章将介绍如何实现WebPart的单步调试的过程. 正文 下面将记录每一步的操作过程. 1.让我们来回忆一下我的网站的主页面. 2.打开前面我们完成了的项目Eallies.WebParts.Associated,找到并打开List.cs文件

vs2010-用VS2010建立一个控制台项目,可以单步调试但是不能直接执行

问题描述 用VS2010建立一个控制台项目,可以单步调试但是不能直接执行 如果直接执行,就会提示错误,如下 无法启动程序"C:Windowssystem32cmd.exe" 系统找不到指定的文件. 但是我是可以找到cmd.exe并运行的,也可以通过双击生成的exe文件来启动项目.

调试程序-uvision5单步调试时自动进入反汇编的问题

问题描述 uvision5单步调试时自动进入反汇编的问题 个人的强迫症很严重,每次DEBUG单步调试程序时都要进行几次反汇编指令才能跳转到下一条调试的语句,感觉各种不爽.求各位大神帮忙,如何设置单步调试时不执行反汇编,直接执行语句????谢谢

asp net ajax-visual studio调试asp.net程序时单步调试时进入函数内部很慢

问题描述 visual studio调试asp.net程序时单步调试时进入函数内部很慢 我的页面采用三层架构,使用jQuery的ajax向后台的一般处理程序请求数据,数据量不是很大,最多也就 几十KB左右,我在一般处理程序中调用读数据库的数据的函数入口添加断点,然后按F11单步调试,从一般处理程序进入逻辑层的函数内部需要很长时间,接近一分钟左右!但是同一个请求,第二次请求时,速度又变得很快了.请问哪位高手遇到过这种类似的问题?有没有什么办法解决?谢谢. 解决方案 是不是第一次需要链接数据库,初始