对于没有任何源代码和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 DotPeek、Telerik JustDecompile、ILSpy和CodeReflect。

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

原文转自:http://www.infoq.com/cn/news/2012/10/precompiled-net-reflector

VS 使用自带的.NET Reflector单步调试编译好的程序集(反编译),以及相关其他反编译程序介绍相关推荐

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

    使用.NET Reflector单步调试编译好的程序集 对于没有任何源代码和PDB文件的预编译程序集而言,如果没有合适的工具,调试起来并不容易.使用Red Gate的.NET Reflector可以在 ...

  2. 数字IC设计随笔之二(VCS、DVE|Verdi单步调试)

    VCS.DVE|Verdi单步调试 使用VCS+Verdi进行仿真时,需要在仿真文件中添加如下代码: initial begin$fsdbDumpfile("test.fsdb") ...

  3. 强大的.NET反编译工具Reflector及插件(转载)

    刚接触.net 时就听说 Reflector这个强大反编译工具呢,只是一直没有去使用他. 本来本人对新鲜事就非常有兴趣,听他这么一说.决定试一试这个传说中的工具. 今天有空就用了一下. 我用的版本是4 ...

  4. 反编译工具Reflector下载(集成FileGenerator和FileDisassembler)

    Reflector是一款比较强大的反编译工具,相信很多朋友都用过它,但reflector本身有很多局限性,比如只能一个一个的查看方法等,但幸好reflector支持插件功能目前网上有很多reflect ...

  5. Reflector反编译winform心得

    Reflactor就不介绍了,.net下的免费反编译工具.Reflactor在某些情况下是很必须的,当遇到bug的时候,可以通过Reflactor看其内部的实现机制,从而找到真正的bug所在.或者可以 ...

  6. .NET Reflector Crack,用于探索和导航反编译代码

    .NET Reflector Crack,用于探索和导航反编译代码 .NET Reflector 可让您查看和调试您使用的所有 .NET 代码的源,从而节省时间并简化开发.通过您自己的代码.第三方组件 ...

  7. .Net Reflector反编译代码与源代码的区别

    Reflector有个File Disasmbler插件,让Reflector可以把反编译的代码保存为文件.通过反编译代码与源程序文件的比较,可以看出两者是有区别的,甚至编译的代码完全有可能无法再通过 ...

  8. .net反编译工具Reflector使用详解

    早就听说Reflector这个强大的类库分析与反编译工具,不过一直没有很好的利用起来.最近使用Reflector解决了一个实际开发问题,现将其总结出来. 需求导入:项目是一个GIS项目,在项目中使用到 ...

  9. 强大的.NET反编译工具Reflector及插件

    刚接触.net 时就听说 Reflector这个强大反编译工具呢,只是一直没有去使用他. 今天update跟我说Reflector如何,如何有用,用的如何,如何爽,还得意的说反编译了不少DLL...本 ...

最新文章

  1. IDC:2017年,40%的CIO将失去在企业中的领导地位
  2. 增强现实、语音合成、深度学习……这款有15年历史的产品,竟然藏了这么多技术...
  3. 中段尾段全段什么意思_头段?中尾段?还是全段?只要排气改对,还怕撩不到妹?...
  4. 为什么姜黄素+胡椒碱会让姜黄素吸收率增加2000%以上
  5. Console-算法-递归算法示例
  6. c语言自动计算时间,C语言 · 计算时间
  7. centos找不到IFCONFIG命令
  8. 从mysql向HBase+Phoenix迁移数据的心得总结
  9. android之常用知识点(一)
  10. centos7恢复mysql数据库_MySQL数据库升级迁移填坑记
  11. python调用腾讯自然语言处理api
  12. 最担心的事情还是发生了!三星折叠屏手机翻车:闪屏、黑屏、“脱皮”
  13. 车和家李想批国内电动车虚假里程宣传:特斯拉都打到家门口了别自嗨了
  14. SuperMap.IS.AjaxScript之常用功能实现研究及使用
  15. 【目标检测】目标检测中的多尺度检测(Multi-Scale),FPN,RPN
  16. 0514JS函数练习
  17. 介绍一种计算机病毒并如何清理,如何清除顽固的计算机病毒和木马
  18. 数字频率系数测试软件,简易数字频率计电路图大全 - 全文
  19. mac的hosts文件位置在哪?
  20. 农夫山泉Java开发工程师一面经历

热门文章

  1. 一键生成网站或qq的二维码
  2. sqlmap使用图解
  3. PCB设计及制作-数字钟-物联网应用系统设计项目开发
  4. mysql初始化失败解决方法
  5. 关于Knuth 的搞笑8卦
  6. 尚硅谷大数据技术Spark教程-笔记02【SparkCore(核心编程,map、mapPartitions、mapPartitionsWithIndex、flatMap、glom、groupBy)】
  7. ESP8266模组作为客户端连接到网络调试助手服务器
  8. 信捷PLC与昆仑触摸屏5轴示教程序
  9. Python+Excel随机试卷及答案生成程序
  10. php数组:城市车牌对应城市名称