PC-lint配置及使用说明(总10页)
-本页仅作为预览文档封面,使用时请删除本页-
1.1 简介
如果要给lint工具下一个形象点的定义,那就是:一种更加严格的编译器。它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。请看下面的例子:
1:char*report(intm,intn,char*p) 2:{ 3: 4:
char*temp; 5: long?nm; 6: inti,k,kk; 7:
charname[11]=\"JoeJakeson\"; 8: nm=n*m; 9:
temp=p==\"\"\"null\":p; 10:
for (i=0;i< m; ++i) 11: { 12: 13: 14: } 15:
if (k ==1)result=nm;
kk=i; k++;
int?result;
16:
else?if (kk>0)result=1; 17:
else?if (kk<0)result=-1; 18:
if (m==result)return(temp); 19:
else?return(name); 20:}
上面的代码用一般的编译器编译是一段有效的代码,但是用PC-Lint编译就会有几个告警。首先第7行向name数组赋值时丢掉了nul字符,第8行的乘法精度会失准,第9行的比较有问题,第12行的变量k没有初始化,第13行的kk可能没有被初始化,第18行的result也有可能没有被初始化,第19行返回的是一个局部对象的地址。这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-Lint只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。
由于我们现有的PC-Lint不是安装版,解压后直接使用,因此省略了安装步骤,而直接进入配置阶段。此外,PC-Lint配置选项比较多,本文档不对其一一进行说明,只介绍一种通用的配置方法。
1.2 文件部署
将提供的压缩文件包解压至C:\\lint目录,然后在此目录下创建一个用于保存自定义配置文件的config子目录。
点击运行进入配置过程。
1.3 选择配置目录
由于是第一次使用PC-Lint,选择配置目录时如下图所示选取前面刚刚创建的config目录,并选择“Create a new ”创建一个新的。
3
1.4 选择编译器
在该页面的编译器列表中提供了50多种流行的C/C++编译器,如果表中没有自己使用的编译器,可选择通用编译器“Generic?Compilers”。
4
1.5 选择内存模型
该页面会让你选择一个内存模型,可以根据自己程序区和数据区的实际大小选择一个恰当的内存模型。根据我们所使用的CPU类型,需要选择“32-bitFlatModule”,内存模型的选项会体现在文件中。
1.6 选择库类型
选完内存模型后,会看到一个库类型列表,根据实际编译的需要可以在这里选择一个或多个编译时使用的库,在此我们选择“Windows 32-bit”。这个选项会体现在文件中。
5
1.7 选择作者
接着是让你选择为使用C++编程提出过重要建议的作者,选择的某作者后,他提出的编程建议方面的选项将被打开。与作者选择有关的选项会体现在文件中。
6
1.8 设置包含目录
下一步是设置包含文件目录。共四个选项,第一个是直接使用现有系统环境变量INCLUDE作为包含文件目录;第二个是让我们立即设置INCLUDE系统环境变量;第三个是使用-i选项,-i选项体现在文件中,每个目录前以-I引导,目录间以空格分隔,例如可设成“-IC:MRIMCC68K- ID:LAPSRCINC”,如果选择使用-I选项,安装程序会接着让你输入包含文件所在的目录;第四个是跳过该页面。我们将在后面的具体使用中设置包含文件搜索路径,在此选择“INCLUDE is already used for this purpose”。
此时,安装程序会提示和文件已经在C:\\lint\\config目录中被创建。确认后会询问是否选择配置更多的编译环境,此处选择否。
1.9 生成选项文件
接下来会询问是否产生一个用于结果消息过滤的选项文件,我们暂时跳过该步骤,先生成一个空的文件,等以后在实际应用时加入必要的选项。
7
1.10 集成到开发环境
接着是选择工作环境。PC-Lint提供了集成在多种开发环境中工作的功能,例如可集成在VC7、CodeWarrior或Source?Insight中。由于我们的源文件不是安装版本,假如在这里选择后会提示出错,因此在该页面中不进行任何选择。
8
1.11 生成批处理文件
安装程序最终会在C:\\lint\\config目录下生成一个文件,该文件是运行PC-Lint的批处理文件,为了使该文件能在任何路径下运行,安装程序提供了两种方法供你选择。第一种方法是让你选择把拷贝到任何一个PATH目录下,在安装结束后会把自动拷贝到你指定的目录。第二种方法是生成一个文件,在每次使用PC-Lint前先运行它来设置路径,或者把文件的内容拷贝到文件中。此处选择“Copy to one of my PATH directories”然后将其拷贝到即将进行lint检查的源文件目录下。
1.12 用命令行方式进行lint
1.12.1
编辑批处理文件
按照上一章介绍的配置过程在C:\\ TestCpuUsage目录生成的文件内容如下: \"C:\\lint\\Lint-nt\" +v -i\"C:\\lint\\config\" -os %1 %2 %3 %4 %5 %6 %7 %8 %9 type | more @echo off echo --- echo output placed in 由于此时还没有设置头文件搜索路径,因此还不能进行lint检查。在-i选项后添加所有可能用到的路径,甚至需要包含一些标准库中的路径。总之,应该在-i\"\"中包含所有用到的头文件包含路径,否则会提示找不到相关文件。编辑后的文件内容如下:
\"C:\\lint\\Lint-nt\" +v -DPLUS;__UREG_DEF_H;_M_IA64;SIMULATE -i\"c:\\lint\\config; 9
TestCpuUsage/dspi;TestCpuUsage/include;\" -os %1 %2 %3 %4 %5 %6 %7 %8 %9 type | more @echo off echo --- echo output placed in 1.12.2
生成待检查的源文件集合
在控制台模式,进入TestCpuUsage工程根目录执行以下命令 $\\ TestCpuUsage >dir /s/b *.cpp *.c >
将该工程中包括子目录中的所有扩展名为*.cpp和*.c的源文件列表输出到中作为后续检查的基准。 1.12.3
进行lint检查
做好以上准备工作后,执行以下命令 $Project$\\ TestCpuUsage >lin
就可以象命令行编译那样进行lint检查了,输出的结果信息保存在文件中。
1.13 用开发环境进行lint
也可以使用开发环境来执行lint操作,一般开发环境都支持运行可执行文件,但不一定支持运行批处理文件。如果我们在先前的配置过程中选定了使用某个开发环境,安装程序会在你安装的目录下生成一个的文件,例如选择了Source?Insight就会有一个文件。用编辑器打开该文件,在该文件开始的注释中说明了如何将PC-Lint功能集成在开发环境中,此处不进行这方面的详细介绍。
1.14 lint选项
lint的选项很多共有300多种,大体可分为以下几类: 错误信息禁止选项 -e# 禁止生成某类错误信息; +e# -w#
恢复生成某类错误信息;
对于所有大于级别的告警信息都不显示;
-wlib() 对于所有大于级别的关于库函数数的告警信息都不显示。我们可以用-wlib(0)来屏蔽所有的库函数的告警信息,-wlib(1)只显示库函数中的句法错误。
-esym(#,)可以屏蔽对于特定符号的某告警信息。
注1: 错误信息禁止选项可以在命令行直接使用,也可以加在前面生成的批处理文件中,当在命令行使用时,不能放在被检测文件的后面,而应该插入到lint命令与被检测文件名的中间(如lin –w2 ); 注2: 执行lint目录下的可以输出文件,这个长达5000行的文件包含了所有的错误信息号和相应的解释。 错误信息分类
大部分的错误信息都有一个对应的错误编号。在中可以得到导致错误的详细信息,C++中
10
的错误信息号与C中的相应错误信息号相差1000。总结如下:
C C++ 1001-1199
1400-1699 1700-1899 1900-1999
Syntax Errors 1-199 Internal Errors 200-299 Fatal Errors Warnings Informational Elective Notes
Warning Level 1 0
0 2 3 4
说明 语法错误 内在的错误,不会发生 致命的错误,将会导致超过某种限制
指明程序中很可能出错 指明程序中可能出错,也可能是个人风格的合法编程实践
不会自动输出,可以检查列表确定是否需关注
300-399 400-699 700-899 900-999
11
因篇幅问题不能全部显示,请点此查看更多更全内容