使用.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反编译器。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可升级, Reflector是一款比较强大的反编译工具,相信很多朋友都用过它,但reflector本身有很多局限性,比如只能一个一个的查看方法等,但幸好reflector支持插件功能目前网上有很多reflector的插件,本人找取了两个应用范围很广,并且广受好评的插件:Reflector.FileDisassembler和Reflector.FileGenerator和Reflector进行了整合,放在了一个压缩包中,大家可以直接解压缩后就开始使用,其中FileGenerator在网上没有现成dll,本人编译后将其取出,放在了压缩包中,一直在苦苦找寻的朋友这次可以拿来直接用了:) 本压缩包中Reflector.exe已经升级为最新的5.0版本,具体的使用方法不多说了,只简单介绍一下本压缩包的使用步骤: 先下载本压缩包并解压缩,运行其中的Reflector.exe(主程序),初次运行会弹出错误提示对话框,因为引用的两个插件DLL是按照我本地实际情况配置的,所以你还需要根据你的实际情况来从新配置一下,方法很简单,我们拿引用FileGenerator.dll来做一个范例, 首先介绍一下Filegenerator,FileGenerator插件的作用是:根据dll文件,把里面的源文件导出成文件,导出来的文件除了没有注释,变量名也变了,其它的可谓是没有差别。对于一些比较好的控件,如果不是开源的,完全可以导出成文件,然后自己加上注释,少许修改,很好的利用起来。(不开源的dll,用起来也不放心啊) 具体的初始化设置方法:点击View->Add-Ins...,弹出一个窗口,然后点击Add->选择文件夹里面的:"FileGenerator.dll",点击close. 然后回到Reflector窗口,Tool->Generator File(s)... 右边就出现了插件的窗口,选中左边的dll文件,点击右边的导出文件,源代码就全部导出来了! 另一个插件Reflector.FileDisassembler.dll设置方法也和这个一样,另外再提供一些Reflector的相关插件下载,

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值