白盒测试工具 Pc lint_第1页
白盒测试工具 Pc lint_第2页
白盒测试工具 Pc lint_第3页
白盒测试工具 Pc lint_第4页
白盒测试工具 Pc lint_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 白盒测试工具白盒测试工具 Pc lintPc lint PCLint/FlexeLint for C/C+是是GIMPEL SOFTWARE公司的产公司的产品品 PC-Lint是一个历史悠久,功能异常强劲的是一个历史悠久,功能异常强劲的静态静态代码检测工具。代码检测工具。 它的使用历史可以追溯到计算机编程的远古时代(它的使用历史可以追溯到计算机编程的远古时代(30多年以多年以前)。前)。 经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐患,而且也能够有效地提出许多程序在空间利用、运行效率上患,而且也能够有效地提出许多程序在空间利用、

2、运行效率上的改进点,的改进点, 在很多专业级的软件公司,比如在很多专业级的软件公司,比如Microsoft, PC-Lint检查无错检查无错误无警告是代码首先要过的第一关误无警告是代码首先要过的第一关 Pc lint的特点的特点 1) PC-Lint是一种静态代码检测工具,可以说,是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。法要求,但很可能是潜在的、不易

3、发现的错误。 2) PC-lint不但可以检测单个文件,也可以从整个项目的不但可以检测单个文件,也可以从整个项目的角度来检测问题,角度来检测问题,PC-Lint在检查当前文件的同时还会检在检查当前文件的同时还会检查所有与之相关的文件查所有与之相关的文件Pc lint的特点的特点 3) PC-lint支持几乎所有流行的编辑环境和编译器,比如支持几乎所有流行的编辑环境和编译器,比如Borland C+从从1.x到到5.x各个版本、各个版本、Borland C+ Build、GCC、VC,VC.net、watcom C/C+、Source insight、intel C/C+等等,等等, 4) 支持

4、支持Scott Meyes的名著(的名著(Effective C+/More Effective C+)中说描述的各种提高效率和防止错误的)中说描述的各种提高效率和防止错误的方法。方法。使用方法使用方法 可以用命令行方式进行,例如可以用命令行方式进行,例如lint-nt u std.lnt test1.c test2.c test3.c 。 也可以集成到开发环境中。也可以集成到开发环境中。 Source Insight SLICKEDIT MS VC6.0 KEIL C. 等等 操作平台操作平台PC-lint for C/C+: Windows NT/ 95/ 98/ 2000/ ME DOS

5、 OS/2 (32 bit) FlexeLint for C/C+: Unix 和和Unix-like 平台平台 (AIX, HP-UX, Sun OS, Solaris, LINUX, Tru64 Unix, SCO, etc.) VAX VMS IBMs VM, MVS OS-9 其他支持其他支持c编译器的平台编译器的平台兼容性兼容性 支持支持K&R C, ANSI C, ANSI/ISO C+ 直接支持直接支持Microsoft, GNU和大多数其他主流的编译器和和大多数其他主流的编译器和库库 支持大多数主流嵌入式系统的编译器支持大多数主流嵌入式系统的编译器 拥有很多支持异类编译

6、器的选项拥有很多支持异类编译器的选项 功功 能能数据检查技术数据检查技术可检测可检测变量初始化变量初始化和和数据误用数据误用的问题的问题 全局数据流跟踪全局数据流跟踪技术,可跨越函数和函数之间的界限进行数技术,可跨越函数和函数之间的界限进行数据处理流程的分析据处理流程的分析 可对可对100个左右的个左右的库函数库函数进行检查,这些检查还可以扩展到用进行检查,这些检查还可以扩展到用户函数上。强化类型检查,并可进行设置检查级别选项户函数上。强化类型检查,并可进行设置检查级别选项 函数变量和返回值的用户自定义语句检查函数变量和返回值的用户自定义语句检查 找出找出没有用的宏没有用的宏,类型定义,类,成

7、员变量类型定义,类,成员变量/函数,声函数,声明明等等(即确定程序中的无用代码,等等(即确定程序中的无用代码,dead code)。)。 PC-Lint可以帮助我们自动查找代码中的可能存在的很多可以帮助我们自动查找代码中的可能存在的很多问题,问题, 包括变量值未初始化、包括变量值未初始化、 数组访问越界、数组访问越界、 空指针访问、空指针访问、 内存泄漏等问题。内存泄漏等问题。 它可以帮我们检查代码中可能潜在的问题,修正模糊或者它可以帮我们检查代码中可能潜在的问题,修正模糊或者不正确的设计。不正确的设计。 PC-Lint8.0的安装的安装由于此版本比较特殊,故无需安装,只需要将由于此版本比较特

8、殊,故无需安装,只需要将RAR压缩包里的所压缩包里的所有文件解压到一个目录下即可,这里定为有文件解压到一个目录下即可,这里定为C:PCLint8目录。目录。解压之后目录中文件及目录的说明如下:解压之后目录中文件及目录的说明如下:lint-nt.exe PC-lint可执行程序;可执行程序;config.exe 配置向导;配置向导;read80.txt 手册的补充说明,最新特性的更新都在这里说明;手册的补充说明,最新特性的更新都在这里说明;pc-lint.pdf PC-Lint英文参考手册,许多问题的答案可以在这英文参考手册,许多问题的答案可以在这里找到;里找到;pr.exe 打印工具;打印工具

9、;.msg.txt 文本格式的错误号信息解释文件;文本格式的错误号信息解释文件;patch.exe LINT补丁升级工具;补丁升级工具;PC-Lint8.0的安装的安装Lnt 包含各种包含各种lnt配置文件的目录配置文件的目录,文件如下:,文件如下:co-.lnt 各种特定的编译器的配置文件各种特定的编译器的配置文件;co.lnt 通用的编译器配置文件;通用的编译器配置文件;sl-.c 支持各种非支持各种非ANSI标准编译器的标准库模块;标准编译器的标准库模块;sl.c 支持支持ANSI标准的通用编译器的标准库模块;标准的通用编译器的标准库模块;env-.lnt 支持包括微软支持包括微软Vis

10、ual Studio在内的各种开发环境在内的各种开发环境以及多种编辑工具的配置文件;以及多种编辑工具的配置文件;lib-.lnt 支持各种特定库的配置选项文件;支持各种特定库的配置选项文件;au-.lnt 作者编程建议的配置文件;作者编程建议的配置文件;Test. 包含各种测试源文件的目录。包含各种测试源文件的目录。配置配置 运行运行C:PCLint8config.exe进行配置进行配置 出现出现命令行使用命令行使用的说明窗口,选择下一步的说明窗口,选择下一步 选择是选择是创建或修改已有配置文件创建或修改已有配置文件STD.LNT的选项,这里的选项,这里我们是第一次配置,故选择上面一个选项我们

11、是第一次配置,故选择上面一个选项Create a new STD.LNT,修改配置路径,然后选择下一步;,修改配置路径,然后选择下一步;界面中配置路径就是界面中配置路径就是PCLint安安装的路径装的路径C:PCLint8,新建的,新建的STD.LNT就存放在这个目录下,就存放在这个目录下,当然用户也可选择另外的配置当然用户也可选择另外的配置路径存放生成的路径存放生成的STD.LNT。 接下来是选择编译器,在下拉框中选择自己使用的接下来是选择编译器,在下拉框中选择自己使用的编译编译器器。这里我们选择。这里我们选择Microsoft Visual C+ 6.x (co-msc60.lnt),点击

12、下一步;,点击下一步;接着会让你选择一个的接着会让你选择一个的内存模型内存模型,可以根据自己程序区,可以根据自己程序区和数据区的实际大小选择一个恰当的内存模型。内存模和数据区的实际大小选择一个恰当的内存模型。内存模型的选项会体现在型的选项会体现在STD.LNT文件中。缺省选择文件中。缺省选择32-bit Flat Model.,然后选下一步;,然后选下一步;选完内存模型后,会看到一个选完内存模型后,会看到一个库类型库类型的列表,在这里选择一个的列表,在这里选择一个或多个编译时使用的库。建议选择或多个编译时使用的库。建议选择Microsofts Foundation Class library

13、和和Windows NT,Windows 32-bit,如果你用到,如果你用到了了Standard Template Library,当然也选上,选择下一步;,当然也选上,选择下一步;接着是让你选择接着是让你选择为使用为使用C/C+编程提出过重要建议的作者编程提出过重要建议的作者,选择的,选择的某作者后,他提出的编程建议方面的选项将被打开,作者建议的配置名为某作者后,他提出的编程建议方面的选项将被打开,作者建议的配置名为AU-xxx.LNT。建议全部选择,选择下一步;。建议全部选择,选择下一步;下一步是选择用何种方式下一步是选择用何种方式设置包含文件目录设置包含文件目录。这里我。这里我们选择用

14、们选择用-i方式协助我们来设置,然后选择下一步;方式协助我们来设置,然后选择下一步;如果步骤如果步骤8中选择使用中选择使用-i选项,安装程序会接着让你输入选项,安装程序会接着让你输入包含文包含文件所在的目录件所在的目录。在下面的文本框里,可手工输入文件包含路。在下面的文本框里,可手工输入文件包含路径,用分号径,用分号“;”或用或用ctrl+Enter换行来分割多个包含路径。或者换行来分割多个包含路径。或者可以点中可以点中Brows,在目录树中直接选择。填完后选择下一步;,在目录树中直接选择。填完后选择下一步;然后出现以下对话框,表示然后出现以下对话框,表示std_a.lnt,std.lnt在配

15、置路在配置路径下已被创建,这里的径下已被创建,这里的std.lnt实际上就是实际上就是std_a.lnt的一的一个拷贝,只是在缺省方式下,个拷贝,只是在缺省方式下,lint时使用的配置文件是时使用的配置文件是std.lnt;接下来将会准备产生一个控制全局编译信息显示情况的接下来将会准备产生一个控制全局编译信息显示情况的选项文件选项文件OPTIONS.LNT,这里选择,这里选择No,即不取消这些,即不取消这些选项。选项。接着选择所支持的集成开发环境选项,可选多个或一个也不选,接着选择所支持的集成开发环境选项,可选多个或一个也不选,PC-LINT提供了集成在多种开发环境中工作的功能,例如可集提供了

16、集成在多种开发环境中工作的功能,例如可集成在成在VC、BC、Source Insight中。这里我们选择中。这里我们选择MS VC+6,这样这样env-v6.lnt就会被拷贝到配置路径中。就会被拷贝到配置路径中。安装程序会生成一个安装程序会生成一个LIN.BAT文件,该文件是运行文件,该文件是运行PC-LINT的批处理文件,为了使该文件能在任何路径下运行,的批处理文件,为了使该文件能在任何路径下运行,安装程序提供了两种方法供你选择。第一种方法是让你安装程序提供了两种方法供你选择。第一种方法是让你选择把选择把LIN.BAT拷贝到任何一个拷贝到任何一个PATH目录下。第二种方目录下。第二种方法是生

17、成一个法是生成一个LSET.BAT文件,在每次使用文件,在每次使用PC-LINT前先前先运行它来设置路径,或者把运行它来设置路径,或者把LSET.BAT文件的内容拷贝到文件的内容拷贝到AUTOEXEC.BAT文件中。建议选择第一种方法,指定的文件中。建议选择第一种方法,指定的目录为安装目录。目录为安装目录。Pclint 配置小结配置小结 上面采用上面采用config.exe 图形工具完成了配置。图形工具完成了配置。 也可以采用手工过程进行配置。也可以采用手工过程进行配置。 1.将将pclint.rar解压至解压至c:, 这样这样lint文件就位与文件就位与c:pclint(安装安装目录目录)下

18、了。下了。 2.将将c:pclintlnt 下的下的3个文件个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至拷贝至c:pclint下,下, 3. 在安装目录下在安装目录下创建创建std.lnt和和options.lnt两个文件,其中两个文件,其中std.lnt的内容如下的内容如下 options.lnt 内容可为空,为定制内容内容可为空,为定制内容,以后需要时再添加。以后需要时再添加。Pclint 配置小结配置小结 3. 在安装目录下创建在安装目录下创建std.lnt和和options.lnt两个文件,其中两个文件,其中std.lnt的内容的内容如下如下d:

19、pclintco-msc60.lntd:pclintlib-w32.lntd:pclintenv-vc6.lntd:pclintoptions.lnt -si4 -sp4-ic:Program FilesMicrosoft Visual StudioCommonMSDev98Bin;c:Program FilesMicrosoft Visual StudioVC98ATLInclude;c:Program FilesMicrosoft Visual StudioVC98Include;c:Program FilesMicrosoft Visual StudioVC98MFCInclude“ 其

20、中其中-i后面的路径名为后面的路径名为VC的安装路径和的安装路径和VC Include 文件路径,根据文件路径,根据自己的修改便可。自己的修改便可。 准备工作做完了,下一步就是要将准备工作做完了,下一步就是要将pclint集成到集成到VC6中去,先配置中去,先配置lint使使之能对单个之能对单个C或或C+文件进行检查文件进行检查 -i 指明包含路径指明包含路径env-vc6.lnt:指定输出错误报告的格式指定输出错误报告的格式co-msc60.lnt:指定指定c+编译器版本编译器版本Lib-w32指定定内存模式指定定内存模式集成到集成到Microsoft Visual C+ 6 打开打开VC6

21、,tools-customize-tools 新建一个名为新建一个名为pclint for unit check的项,在下面填入的项,在下面填入 command: C:pclintlint-nt.exe arguments: -u c:pclintstd.lnt $(FilePath) Use Output Window 打上勾打上勾 close 完成。完成。 这样,在这样,在VC窗口窗口tools菜单下应该多了一个菜单下应该多了一个pclint选项,选项,可以用它来运行可以用它来运行lint程序,对程序,对单个单个c/c+代码进行静态检代码进行静态检查了。查了。 -u 指明使用哪些指明使用哪

22、些.lnt文件文件文件路径,不能缺省文件路径,不能缺省 首先导出首先导出当前工程的当前工程的.lnt文件文件 方法如下:方法如下:检查当前检查当前活动工程活动工程中的所有源文件的设置方法中的所有源文件的设置方法 导出当前工程的导出当前工程的.lnt文件文件 Command: C:PCLint8LINT-NT.EXEArguments: +linebuf $(TargetName).dsp$(TargetName).lntInitial directory: $(TargetDir)Command:Lint-nt.exe文件及其绝地路径(如果路径中有空格,路径要用文件及其绝地路径(如果路径中有空

23、格,路径要用“”“”)。)。+linebuf $(TargetName).dsp$(TargetName).lnt参数参数+linebuf表示加倍行缓冲的大小,最初是表示加倍行缓冲的大小,最初是600 bytes,行缓冲用于存放当,行缓冲用于存放当前行和你读到的最长行的信息。前行和你读到的最长行的信息。$(TargetName)是是VC集成开发环境的环境变量,表示当前激活的集成开发环境的环境变量,表示当前激活的Project名字名字注意要选中注意要选中“Use Output Window”选项,这样选项,这样PC-Lint就会将信息输出到就会将信息输出到Output窗口中。窗口中。 在在Ini

24、tial directory 的的$(TargetDir)表示在这个目录(表示在这个目录(project 所在目录的所在目录的debug)下执行此命令,如果不指定,则将)下执行此命令,如果不指定,则将.lnt文件存放在文件存放在project 文件所在文件所在的目录下。的目录下。导出当前工程的导出当前工程的.lnt文件文件 检查当前活动工程中的所有源文件的设置方法检查当前活动工程中的所有源文件的设置方法 不写该部分的话,不写该部分的话,直接在输出窗口直接在输出窗口中显示信息。中显示信息。否则,将分析结否则,将分析结果显示在叔叔窗果显示在叔叔窗口中口中检查当前活动工程中的所有源文件的设置方法检查

25、当前活动工程中的所有源文件的设置方法 打开打开VC6,tools-customize-tools 新建一个名为新建一个名为pclint for project check的项,在下面填入的项,在下面填入 command: C:pclintlint-nt.exe arguments: +ffn u c:PC-Lintstd.lnt $(TargetName).lnt Initial directory: .$(TargetDir)(与前一步的设置一致与前一步的设置一致) Use Output Window 打上勾打上勾 close 完成。完成。 参数中参数中+ffn表示表示Full File N

26、ames LINT对常见错误的检查对常见错误的检查1. 检测指针的错误使用检测指针的错误使用Lint对使用空指针,指针越界,对常量内容的更改等。对使用空指针,指针越界,对常量内容的更改等。int main ()int la;char x100,c=10;char *p=x;for(c =0 ; c120; c+ ) *(p+) =c;/* 不会检查出错误不会检查出错误 */x102 = 100;/*会检查出错误会检查出错误 */*(p+102)= 100;/*会检查出错误会检查出错误 */p102= 100;/*会检查出错误会检查出错误 */return c;检测检测if语句中的错误语句中的错

27、误对于对于if语句中经常出现的把语句中经常出现的把”=”写成写成”=”的错误,的错误,能够通过能够通过lint检测出来。检测出来。int main()char x100,c;char *p=x;if(c big); /* 错误号错误号721,可疑的分号,可疑的分号;用法用法 */big = xi;能够检测出代码中能够检测出代码中if语句之后的可疑的正缩进格式:语句之后的可疑的正缩进格式:if (xi big)big = xi;y = big; /* 错误号错误号539,此行不应该正缩进,此行不应该正缩进 */能够检测出代码中能够检测出代码中if语句之后的可疑的负缩进格式:语句之后的可疑的负缩进

28、格式:if ( y z)if (yz+2) y = z;else /*错误号错误号525,此行不应该负缩进,此行不应该负缩进 */x = z;检测检测switch结构中的错误结构中的错误lint能够检测出能够检测出switch分支中漏掉的分支中漏掉的”break”语句。如果某语句。如果某个分支确定不使用个分支确定不使用break;可以在可以在”case“的前一行加上注释。的前一行加上注释。另外另外lint还对没有还对没有default分支的分支的switch报错。报错。 int main ()int la;char x100,c;c = 1;switch(c)case a:case b:/*

29、两个两个case连在一起,没有错误连在一起,没有错误 */break;case c:c=100;case d:/* 没有没有break, 错误错误 */break;/* 错误,未使用错误,未使用default */检测变量越界错误检测变量越界错误比较数值时,常量的范围超过了比较数值时,常量的范围超过了 int main ()int a, b, c;char x100,c=10;char *p=x;for(c =0 ; c300; c+ )/* 变量越界,错误变量越界,错误650 */ *(p+) =c;/* 不会检查出错误不会检查出错误 */return c;错 误 编错 误 编码码错误说明错误说

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论