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

摘要:
使用RedGateNETReflector可以在VisualStudio中立即反编译程序集,然后像调试源代码程序集一样一步一步地跟踪它。RedGate的Visual Studio插件。NETReflector可以立即反编译。NETReflector将首先尝试在本地计算机上找到PDB文件。如果没有,它将创建PDB文件本身。然后,用户可以单步执行程序集代码,设置断点,并使用常规调试技术(见图4)。7月22日,版本7.6.0.808。NET Reflector可供下载。2011年3月14日,随着NETReflector7的发布,RedGate已将其作为商业产品。该公司的几个竞争对手立即免费发布了他们的软件,包括JetBrainsDotPeek、TelerikJustDecompile、ILSpy和CodeReflect。

对于没有任何源代码和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)。

(单击图片以放大)

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

图1 内置的对象浏览器

(单击图片以放大)

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

图2 .NET Reflector对象浏览器

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

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

(单击图片以放大)

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

图4 调试编译好的程序集

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

InfoQ记者Jonathan Allen写到,

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

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

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

使用.NET Reflector单步调试编译好的程序集第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集成。

(单击图片以放大)

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

图6 DotPeek

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

(单击图片以放大)

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

图7 JustDecompile

(单击图片以放大)

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

图8 JustDecompile的查找对话框

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

(单击图片以放大)

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

图9 ILSpy

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

(单击图片以放大)

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

图10 CodeReflect

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

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

免责声明:文章转载自《使用.NET Reflector单步调试编译好的程序集》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇什么时候该用NoSQL?bpc 数据处理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

DevExpress源码编译总结

独家提供完整可编译sln文件,本篇文章内容包括基础知识(GAC、程序集强签名、友元程序集)、编译过程、注册GAC、添加工具箱、多语言支持、运行时和设计时调试 源码地址链接:http://pan.baidu.com/s/1miNCHug密码:rlyr关于编译源码,前前后后折腾了太久,自己折腾,到官网折腾,到DXPER折腾,今天,总算有个结局了 编译环...

C# 关键字extern用法

修饰符用于声明在外部实现的方法。extern 修饰符的常见用法是在使用 Interop 服务调入非托管代码时与 DllImport 属性一起使用;在这种情况下,该方法还必须声明为 static,如下面的示例所示:[DllImport("avifil32.dll")]private static extern void AVIFileInit();注意ext...

c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥

对于微软开发者来说,每次BUILD大会都是值得期待的。这次也是惊喜满满,除了大众瞩目的WP8.1的发布还有一项会令开发者兴奋的技术出现:.NET NATIVE。下面就来详细了解一下其为何物。 [小九的学堂,致力于以平凡的语言描述不平凡的技术。如要转载,请注明来源:小九的学堂。cnblogs.com/xfuture]    .Net当初的出现是因为Java...

如何用VS进行程序调试

VS是一个强大的IDE,如果你现在只会简单地用它查看一下执行效果,那就太大材小用了。 1. CRT函数报错 首先来说说最常见的一个编译错误。微信里常常收到这个错误的截图提问。 CRT(C Runtime Library = C运行时间库)是windows平台下的一个概念。CRT函数准的C语言函数。例如:printf、scanf、strlen、fopen等函...

逆向安全基础之IDA使用简介

转载:http://m.blog.csdn.net/ilnature2008/article/details/54912854IDA简介IDA是业界一个功能十分强大的反汇编工具,是安全渗透人员进行逆向安全测试的必备工具,其强大的静态反汇编和逆向调试功能能够帮助安全测试人员发现代码级别的高危致命安全漏洞,当然其价格也不便宜,国内一个license从几千到一万...

Deep Learning部署TVM Golang运行时Runtime

Deep Learning部署TVM Golang运行时Runtime 介绍 TVM是一个开放式深度学习编译器堆栈,用于编译从不同框架到CPU,GPU或专用加速器的各种深度学习模型。TVM支持来自Tensorflow,Onnx,Keras,Mxnet,Darknet,CoreML和Caffe2等各种前端的模型编译。TVM编译模块可以部署在LLVM(Java...