使用FxCop工具分析.NET托管代码

 使用FxCop工具分析.NET托管代码

我从未遇到没经历过译码错误的程序员。因此,跟踪和定位这些错误可能会成为你工作的最重要方面之一。下一次如果你需要分析你的托管.NET代码,我向你推荐微软(Microsoft)开发的FxCop工具,来帮您揪出这些bug。

什么是FxCop?

FxCop是一个代码分析工具,它依照微软.NET框架的设计规范对托管代码assembly(可称为程序集,assembly实际上指的就是.net中的.exe或者.dll文件(不包括netmodule文件),这种文件中包含四种信息:assembly的清单(包括引用外部的assembly、netmodule与资源文件及包含在同一文件中的assembly);类型描述信息,包括版本信息与类的描述等;MSIL微软中间语言;资源(图标等))进行检查。它使用基于规则的引擎,来检查出你代码中不合规范的部分;你也可以定制自己的规则加入到这个引擎。这个工具微软免费提供。最新版需要.NET 2.0支持;此外,也有一个较老的针对.NET1.1的版本。

最新版FxCop使用一项叫做内窥(introspection,或称内观、内视)的技术,以窥探你的assembly内部,而前一个版本则使用映射(reflection,或称反射)技术。这一点值得关注,因为使用上一个版本调试碰到问题你不得不停下来,对代码作了任何更改之后都需要重新开始调试;而这些对于新版本都没有必要了。

大多数代码分析工具扫描你的源代码,但是FxCop直接对你编译好的代码处理。.NET的每个assembly都有其metadata(可称为元数据,metadata是关于一个assembly中各元素的类型信息库,它本身也存放在这个assembly中),它对assembly以及assembly内用到的所有类型进行描述。FxCop会使用这个metadata以获知代码内部的运行状况。另外,它也对代码编译时生成的MSIL(Microsoft Intermediate Language,微软中间语言)进行检查。

通过对metadata和MSIL检查的结合,FxCop可以得出大量信息,以此获得对代码执行时所作所为的理解。它把你的代码和各条规则逐一比较检查,在每一个实例中,当找到不符合规则的代码时就生成一条消息。

FxCop给出的消息的译解

下载并安装之后FxCop就可以运行了。FxCop采用单个Windows界面,该界面包括如下三个面板区(当你第一次打开时):

设置(Configuration)面板(左侧):这个面板有两个选项卡,分别标为“目标”(Target)和“规则”(Rules),分别用来定义所要分析的各个assembly以及分析所用的规则。FxCop 把所要分析的assemblies、资源(resources)、命名域(namespaces),或者类型(types)叫做目标。这些规则则将应用于这些目标。

消息(Message)面板(右侧):分析结果(由工具条上的“分析”按钮启动)将在消息面板中显示。这些消息主要就是FxCop推荐的对你的代码/assembly进行改进的信息列表。

属性(Properties)面板(屏幕底部):该面板有两个选项卡,分别标为“输出”(Output)和“属性”(Properties)。“输出”选项卡显示根据规则得出的信息、警告和错误消息。“属性”选项卡则显示所选中的assembly、命名域、类型、类型成员、规则群、规则,或者消息的详细信息。

消息面板是FxCop界面上最为重要的一个部分,因为是它给出了所要改进的内容的信息。总而言之,这就是你为什么首选FxCop工具的原因。

FxCop工具产生的消息包括以下五栏(你也可以在工具中增加或者删除信息栏目):

等级(Level:FxCop为每个问题的严重性指定一个等级。这些等级分别是严重错误(Critical Error)、错误(Error)、严重警告(Critical Warning)、警告(Warning),以及信息(Informational)。严重错误等级表明在大多数情况下代码不会正确执行,因此尤其重要。信息等级则最无关紧要,因为它仅仅对代码归纳信息。

修复类别(Fix Category):这由FxCop赋给每一条消息。可能的两个值是“打断”(Breaking)(即,这个代码问题会打断代码执行,代码不会按照预想的方式运行)和“不打断”(Not Breaking)。

确信度(Certainty):确信度是FxCop认为的这个问题确实是问题的可能性百分率。实际上,经过你对有疑问的代码一番检查分析之后,会发现有一些消息并不是什么问题,因此FxCop给每一项消息分配了一个百分率,以让你知道程序对这确实是个问题的确信程度。

规则(Rule):产生这个消息的规则名称。

项目(Item):产生这个消息的目标项目名称。

如果要知道消息的更多信息,你可以双击它看完整消息。信息内容包括:所违反的规则详情;和规则和冲突的详细代码;获得更多信息的超链接(联机);以及其它更多信息。

一个例子:关于从FxCop能够期望得到的好处

假设你有一个简单的C# Windows 应用程序,它创建一个数组并显示其内容。清单A显示FxCop将如何分析此应用程序。清单B的小片段是代码assembly载入FxCop之后所生成的消息之一。

稍作分析之后发现这条严重等级信息并非对程序运行威胁巨大,它不过是和把应用程序的运行结果滚动显出给用户有关(Microsoft建议assembly应该使用强限定性的名称,且需要预先声明)。

这个例子过于简单,但是你可以自己下载这个应用程序,并通过使用获得更好的理解。FxCop另一个优良特性是它允许你把消息保存为XML格式的报告文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值