使用.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 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

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

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

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

  2. 如何用vc6编译ffmpeg, 并单步调试。

    如何用vc6编译ffmpeg, 并单步调试. 目前官方ffmpeg的最新版本为0.9, 我们就以此为例: 1. 下载最新git版本的源代码(http://ffmpeg.zeranoe.com/buil ...

  3. ffmpeg编译gb28181_RTSP/GB28181协议/海康SDK/Ehome协议视频上云网关EasyCVR视频平台在linux环境下ffmpeg源码单步调试环境搭建...

    目前TSINGSEE青犀视频研发的视频上云服务平台EasyCVR已经可集成海康EHome私有协议,并且在前文中我也跟大家讲过EHome协议的配置和调用流程,有兴趣的可以阅读一下:配置及协议介绍.Eho ...

  4. Windows上VS2017单步调试FFmpeg源码的方法

    之前在https://blog.csdn.net/fengbingchun/article/details/90114411 介绍过如何在Windows7/10上通过MinGW方式编译FFmpeg 4 ...

  5. 单步调试_keil for arm 调试时无法单步运行及打断点

    在keil调试的过程中,会出现部分函数断点打不上去.单步调试step over功能无法使用的情况.造成该情况的主要原因可能为编译时使用的优化等级过高,导致其调试信息失真的问题. 解决办法,打开魔术棒- ...

  6. 【VS 2017 C语言 汇编语言】如何使用VS 2017,通过反汇编查看C语言代码对应的32位x86汇编语言 VS 2017单步调试的使用

    0 前言 本文适用于VS的大多数版本,本文以VS 2017为例进行讲解. 1 编辑C语言代码 首先,在VS编译器中,创建项目,敲一段C语言代码,这个过程不解释了,如果不会请百度. #include & ...

  7. linux下gdb单步调试

    用 GDB调试程序 GDB 概述 ---- GDB 是 GNU开源组织发布的一个强大的 UNIX下的程序调试工具.或许,各位比较喜欢那种图形界面方式的,像 VC. BCB等 IDE的调试,但如果你是在 ...

  8. VC++6.0 单步调试

    在VC++6.0中的单步调试: 调试重要的几个键: F9在当前光标所在的行下断点,如果当前行已经有断点,则取消断点. F5调试状态运行程序,程序执行到有断点的地方会停下来. F10执行下一句话(不进入 ...

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

    下面将记录每一步的操作过程. 1.让我们来回忆一下我的网站的主页面. 2.打开前面我们完成了的项目Eallies.WebParts.Associated,找到并打开List.cs文件,在需要调试的地方 ...

最新文章

  1. 2011下半年案例分析题的解答思路_信息系统项目管理师考试
  2. 数字电路时钟问题——Jitter与Skew区别
  3. python【数据结构与算法】内建模块itertools(操作迭代对象)
  4. android 关机充电流程
  5. powerquery加载pdf_PowerQuery技巧之自学教程
  6. MySQL slowlog 统计_mysql slow log 简单统计
  7. 解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (6)
  8. IT专用英语词汇1500词
  9. APUE---chap3文件I/O---3.11原子操作
  10. ADB的下载安装和基本命令
  11. Topic 18. 临床预测模型之缺失值插补方法
  12. Android封装支付宝支付
  13. Ios常用第三方动画框架(三)
  14. input file本地图片预览的方法(兼容IE、Chrome和Firefox)
  15. 建武28a对讲机最大距离_健伍TH-26A,TG-28A,TH-28A和TK208对讲机检修实例说明
  16. 2019手机CPU芯片性能天梯图
  17. Google最新VR(sdk的诞生)
  18. Android开发:微信应用签名如何获取
  19. Exception 异常
  20. C# PDF转为图片的方法

热门文章

  1. 天线效应antenna effect
  2. java 判断文件类型是否是音频_Android判断文件类型(视频、音频、图片等) | 学步园...
  3. 各省环境污染治理投资占GDP比重面板数据 (2003-2018年)
  4. Arduino输入0/1控制步进电机正反转一定行程
  5. 分布式微服务架构的技术体系
  6. iOS学习笔记64-Apple Pay编程指南
  7. vue项目引入阿里巴巴矢量图标库图标及其使用教程
  8. 苹果禁止使用热更新???
  9. 关于Mysql8.0免安装版本的密码设置问题
  10. Netty权威指南——HTTP协议开发应用(HTTP文件服务器)