找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4357|回复: 0

代码测试工具:PC-LINT

[复制链接]
发表于 2011-12-28 10:24:06 | 显示全部楼层 |阅读模式
代码测试工具:PC-LINT

此资料在引导读者入门,学会 PC-LINT的基本使用方法,起抛砖引玉的作用,能让读者从这里起步继续去研究如何娴熟地 使用PC-LINT的各种选项,能让它充分为我们的开发工作服务。

1.概述  
  如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。我们一般会忽视掉waring,但waring或许会变成下一个error.。

请看下面的例子:
1:  
2:char *report( int m, int n, char *p )  
3:{  
4: int result;  
5: char *temp;  
6: long nm;  
7: int i, k, kk;  
8: char name[11] = "Joe Jakeson";  
9:  
10: nm = n * m;  
11: temp = p == "" ? "null" : p;  
12: for( i = 0; i 13: {  
14: k++;  
15: kk = i;  
16: }  
17:  
18: if( k== 1 ) result = nm;  
19: else if( kk > 0 ) result = 1;  
20: else if( kk < 0 ) result = -1;  
21:  
22: if( m == result ) return( temp );  
23: else return( name );  
24:}  
  上面的代码用一般的编译器编译是一段有效的代码,但是用PC-LINT编译就会有几个告 警。首先第8行向name数组赋值时丢掉了nul字符,第10行的乘法精度会失准,第11行的比 较有问题,第14行的变量k没有初始化,第15行的kk可能没有被初始化,第22行的result也有可能没有被初始化,第23行返回的是一个局部对象的地址。这段代码在大部分编译器下 是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将 是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-LINT只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。

2.如何安装PC-LINT
可以使用开发环境来执行LINT操作,一般开发环境都支持运行可执行文件,但不一定支持运行批处理文件,下面用Source Insight , Ultra Edit, VC 6.0 来举例说明如何在开发环境下进行LINT。
①        在Source Insight中集成  
如果你在安装过程中选定了使用某个开发环境,安装程序会在你安装的目录下生成一个env-xxx.lnt的文件,例如选择了Source Insight就会有一个env-si.lnt文件。用编辑器打开该文件,在该文件开始的注释中说明了如何将PC-LINT功能集成在开发环境中,集成在Source Insight中的过程如下:  
1)从Options菜单中选择“Custom Commands”命令项。  
2)在Name栏中输入“PC-lint ”,原则上这个名称可以随便起,只要你能搞清楚它的含义就可以了。  
3)在Run栏中输入“c:\lint\lint-nt -u -ic:\lint std env-si %f”其中c:\lint是你PC-LINT的安装目录。  
4)在Output栏中选择“Iconic Window”、“Capture Output”。  
5)在Control栏中选择“Save Files First”。  
6)在Source Links in Output栏中选择“Parse Links in Output”、“File,then Line”。  
7)在Pattern栏中输入“^\([^ ]*\) \([0-9]+\)”。  
8)点Add键加入该命令。
9)使用时,在Source Insight下打开要LINT的文件,打开Options菜单中的“Custom Commands”命令项,在“Command”栏中选择“PC-lint unit check”命令运行即可。
请注意,不论你怎样配置参数一定不要忘记了将si-env.lnt包含在你的配置文件里,否则就无法进行错误信息和程序的自动对应了。
②在Ultra Editor中集成  
选取 Menu | Advanced | Tool Configuration ...   
1)点按“Insert",  
2)在command line:中填写:c:\lint\lint-nt c:\lint\std.lnt %f  
3)在Menu Item中填写:PC-LINT  
4)在Command Output中选择: (x) Output to List Box 和 (x) Capture Output  
5)点按"OK"
③在VC 6.0中集成
基本原理是一样的:(当然你也可以在VS2005中试试,呵呵)  
1)选取 menu | tools | customize.....  
2)选取 Tools Tab:  
3)点按主对话框上方的虚线小方框 New a tool item  
4)输入 name: PC-LINT  
5)输入 Command: c:\lint\lint-nt.exe  
6)输入 Arguments: c:\lint\std.lnt $(FilePath)  //注:替std.lnt为lnt\env-vc6.lnt
7) 选择 (x) Use Output Window  
8)Close  
完成后,在tools菜单下就会有一项PC-LINT选项。

3.        LINT选项
   LINT的选项很多共有300多种,大体可分为以下几类:  
1)错误信息禁止选项  
该类选项是用于禁止生成某类错误信息的选项,最常用的是-e和+e,-e是禁止生成某类错
误信息,+e是恢复生成某类错误信息。运行lint目录下的msg.exe可以得到msg.txt文件,这个长达5000行的文件包含了所有的错误信息号和解释。  
-w 对于所有大于级别的告警信息都不显示。  
-wlib()对于所有大于级别的关于库函数数的告警信息都不显示。我们可以用-wlib(0)来屏蔽所有的库函数的告警信息,-wlib(1)只显示库函数中的句法错误。-esym(#,) 可以屏蔽对于特定符号的某告警信息。  
2)变量类型大小选项  
不同的目标机、编译系统变量类型的的大小(如短整形变量、整形变量等)会有所不同,该类选项用于为目标机设置变量类型的大小。由于默认的设置与大部分的编译器是匹配的,这些专门的设置通常情况下是不需要的,只在特别的目标机结构中才用。例如一个M68000目标机,它的int类型和指针类型通常是32bit的,这时你应该使用选项:-si4 -sp4。这些尺寸参数的当前值可以通过help屏来获得,例如可以输入以下命令行:lin -si4 -sp4 ?  
3)冗长信息选项  
冗长信息指的是LINT过程中产生的一些与编译过程有关的信息,而不是真正的告警信息、错误信息等。是否生成这些信息可以通过-v和+v选项来决定。+v是生成这些信息,-v是关闭这些信息,这组选项中除+v外,其它所有选项都可以关闭+v选项。  
4)标记选项  
以+f、++f、-f和--f开头的选项是标记选项。他们的逻辑含义分别如下:  
+f...:通过把标志置为1而把它置为ON  
-f...:通过把标志置为0而把它置为OFF  
++f...:标志增1  
--f...:标志减1  
后面两个用于你想在局部把一个标志置为ON的情况,而不影响全局设置。例如你可以这样使用:  
/*lint ++flb */  
int printf( );  
/*lint --flb */  
标记选项的种类很多,基本含义是用于打开或关闭某类语法情况使用,例如允许使用缩写  
结构体名称,允许使用无名联合体,把所有模块当作C++编译等。  
5)消息显示选项  
消息显示选项用于定义消息输出格式。主要有消息高度选项、消息宽度选项、消息格式选  
项等。  
6)其它选项  
其它选项中的种类很多,各种类间差异很大,由于本人还没怎么弄明白,在这里就不一一介绍了。

后记:当然PC-LINT只是一个检测代码的工具,所有的工具都是为了我们写出更符合逻辑、规范的代码,使代码更简洁,程序稳定性更好而已
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-4-17 02:26 , Processed in 0.012721 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表