代码改变世界

给喜欢刨根问底的.NET程序员的一个礼物——TypeMonster

2012-05-09 16:45  猫爪洗脸君  阅读(2266)  评论(13编辑  收藏  举报

上图是NET程序集分析工具TypeMonster的截图(这是一个原型,已经可以运作)。它显示了从 Object 到 FrameworkElement 的继承链。

TypeMonster是一个辅助分析工具,帮助程序员分析一个.NET类型的内部结构,及其内部的运作机制。

从这一点看TypeMonster的功能看起来和.NET Reflector类似。但实际上两者的定位是不同的。

TypeMonster核心理念,并不仅仅是告诉你目标程序集里“有什么”,而是为你提供一个精心设计的分析工具集,让你弄清楚“为什么”目标程序集里有这些东西。

从上面的运行图例可以看出TypeMonster的用户界面是经过精心设计的,因此我们有理由相信使用它完成类型进行分析是一件愉快的事。

TypeMonster内置了一套好用的笔记与注解功能,分析人员可以直接在TypeMonster内编写分析笔记——这是对我而言最重要的功能!

因为工作的关系,我经常需要分析一些程序集内部的运作机制。过去我一直是使用.NET Reflector,后来也试过其他一些工具,例如JustDecompile。

这些工具都很强大。但是我最苦恼的地方是,这些工具的设计风格,基本上还是非常传统的Windows应用程序风格——使用各种内置成品控件,例如菜单、按钮、树形控件、拥挤的界面划分等等。

看看现在平板电脑上的设计,传统桌面平台的设计简直就是石器时代。我并不是说平板上的就都是好东西,平板上的垃圾软件和游戏堆得比山还高,但是平板上引入的新的设计方法,是值得借鉴的。并且我认为在桌面平台上也应该可以很好的再现出来。

带着这样的想法,我开始来制作TypeMonster。上面的截图是来自真实可运行的版本,但是在发布第一个版本之前我还需要为它添加许多的细节。

目前我已经为它开发了一个符合ECMA-355(5e)规范的反汇编引擎。在此基础上,我希望不久后,TypeMonster也可以将一个方法反编译为等价的C#或者VB.NET代码。

但我认为这并不是重点。因为这件事.NET Reflector已经做得很好了,我会花费更多的精力,来完善TrustMore的视觉细节,并完善其他功能。

接下来要完成的工作:

  • 补充一些过滤条件,例如 public、internal 等等
  • 为Field和Property显示出其对应的类型信息
  • 为Method显示出参数列表和返回值类型信息
  • 对重载的Method创建一个组,而不是显示一系列同名的函数
  • 能够扫描GAC,创建一个cache文件快速完成类型匹配和检索
  • 其他

我已经在这一程序上花费了超过一个月的时间。并且我将继续在其上花费更多的时间。

如果顺利,在下周就可以发布第一个预览版本。如果你关注这一项目,欢迎你订阅我在博客园的博客。如果有什么建议或者疑问,欢迎留言。如果有什么批评,恳请轻拍。

最后强调一下,TypeMonster 会是一个开源、免费的软件。很快会托管在 Github 上。

谢谢!