白盒测试工具Pclint.ppt

上传人:小飞机 文档编号:6594242 上传时间:2023-11-16 格式:PPT 页数:43 大小:337.50KB
返回 下载 相关 举报
白盒测试工具Pclint.ppt_第1页
第1页 / 共43页
白盒测试工具Pclint.ppt_第2页
第2页 / 共43页
白盒测试工具Pclint.ppt_第3页
第3页 / 共43页
白盒测试工具Pclint.ppt_第4页
第4页 / 共43页
白盒测试工具Pclint.ppt_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《白盒测试工具Pclint.ppt》由会员分享,可在线阅读,更多相关《白盒测试工具Pclint.ppt(43页珍藏版)》请在三一办公上搜索。

1、白盒测试工具 Pc lint,Pc lint,PCLint/FlexeLint for C/C+是GIMPEL SOFTWARE公司的产品 PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具。它的使用历史可以追溯到计算机编程的远古时代(30多年以前)。经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐患,而且也能够有效地提出许多程序在空间利用、运行效率上的改进点,在很多专业级的软件公司,比如Microsoft,PC-Lint检查无错误无警告是代码首先要过的第一关,Pc lint的特点,1)PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以

2、象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。2)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)支持Scott Meyes的名著(Effective C+/More Effective C+)中说描述的各

3、种提高效率和防止错误的方法。,使用方法,可以用命令行方式进行,例如lint-nt u std.lnt test1.c test2.c test3.c。另外支持MAKEFILE方式。也可以集成到开发环境中。Source InsightSLICKEDITMS VC6.0KEIL C.等,操作平台,PC-lint for C/C+:Windows NT/95/98/2000/ME DOS OS/2(32 bit)FlexeLint for C/C+:Unix 和Unix-like 平台(AIX,HP-UX,Sun OS,Solaris,LINUX,Tru64 Unix,SCO,etc.)VAX VM

4、S IBMs VM,MVS OS-9 其他支持c编译器的平台,兼容性,支持K&R C,ANSI C,ANSI/ISO C+直接支持Microsoft,GNU和大多数其他主流的编译器和库 支持大多数主流嵌入式系统的编译器拥有很多支持异类编译器的选项,功 能,数据检查技术可检测变量初始化和数据误用的问题 全局数据流跟踪技术,可跨越函数和函数之间的界限进行数据处理流程的分析 可对100个左右的库函数进行检查,这些检查还可以扩展到用户函数上。强化类型检查,并可进行设置检查级别选项 函数变量和返回值的用户自定义语句检查 找出没有用的宏,类型定义,类,成员变量/函数,声明等等。,PC-Lint可以帮助我们

5、自动查找代码中的可能存在的很多问题,包括变量值未初始化、数组访问越界、空指针访问、内存泄漏等问题。它可以帮我们检查代码中可能潜在的问题,修正模糊或者不正确的设计。,PC-Lint8.0的安装,由于此版本比较特殊,故无需安装,只需要将RAR压缩包里的所有文件解压到一个目录下即可,这里定为C:PCLint8目录。解压之后目录中文件及目录的说明如下:lint-nt.exe PC-lint可执行程序;config.exe 配置向导;read80.txt 手册的补充说明,最新特性的更新都在这里说明;pc-lint.pdf PC-Lint英文参考手册,许多问题的答案可以在这里找到;pr.exe 打印工具;

6、.msg.txt 文本格式的错误号信息解释文件;patch.exe LINT补丁升级工具;,PC-Lint8.0的安装,Lnt 包含各种lnt配置文件的目录,文件如下:co-.lnt 各种特定的编译器的配置文件;co.lnt 通用的编译器配置文件;sl-.c 支持各种非ANSI标准编译器的标准库模块;sl.c 支持ANSI标准的通用编译器的标准库模块;env-.lnt 支持包括微软Visual Studio在内的各种开发环境以及多种编辑工具的配置文件;lib-.lnt 支持各种特定库的配置选项文件;au-.lnt 作者编程建议的配置文件;Test.包含各种测试源文件的目录。,配置,运行C:PC

7、Lint8config.exe进行配置,出现命令行使用的说明窗口,选择下一步,选择是创建或修改已有配置文件STD.LNT的选项,这里我们是第一次配置,故选择上面一个选项Create a new STD.LNT,修改配置路径,然后选择下一步;,界面中配置路径就是PCLint安装的路径C:PCLint8,新建的STD.LNT就存放在这个目录下,当然用户也可选择另外的配置路径存放生成的STD.LNT。,接下来是选择编译器,在下拉框中选择自己使用的编译器。这里我们选择Microsoft Visual C+6.x(co-msc60.lnt),点击下一步;,接着会让你选择一个的内存模型,可以根据自己程序区

8、和数据区的实际大小选择一个恰当的内存模型。内存模型的选项会体现在STD.LNT文件中。缺省选择32-bit Flat Model.,然后选下一步;,选完内存模型后,会看到一个库类型的列表,在这里选择一个或多个编译时使用的库。建议选择Microsofts Foundation Class library 和Windows NT,Windows 32-bit,如果你用到了Standard Template Library,当然也选上,选择下一步;,接着是让你选择为使用C/C+编程提出过重要建议的作者,选择的某作者后,他提出的编程建议方面的选项将被打开,作者建议的配置名为AU-xxx.LNT。建议全

9、部选择,选择下一步;,下一步是选择用何种方式设置包含文件目录。这里我们选择用-i方式协助我们来设置,然后选择下一步;,如果步骤8中选择使用-i选项,安装程序会接着让你输入包含文件所在的目录。在下面的文本框里,可手工输入文件包含路径,用分号“;”或用ctrl+Enter换行来分割多个包含路径。或者可以点中Brows,在目录树中直接选择。填完后选择下一步;,然后出现以下对话框,表示std_a.lnt,std.lnt在配置路径下已被创建,这里的std.lnt实际上就是std_a.lnt的一个拷贝,只是在缺省方式下,lint时使用的配置文件是std.lnt;,接下来将会准备产生一个控制全局编译信息显示

10、情况的选项文件OPTIONS.LNT,这里选择No,即不取消这些选项。,接着选择所支持的集成开发环境选项,可选多个或一个也不选,PC-LINT提供了集成在多种开发环境中工作的功能,例如可集成在VC、BC、Source Insight中。这里我们选择MS VC+6,这样env-v6.lnt就会被拷贝到配置路径中。,安装程序会生成一个LIN.BAT文件,该文件是运行PC-LINT的批处理文件,为了使该文件能在任何路径下运行,安装程序提供了两种方法供你选择。第一种方法是让你选择把LIN.BAT拷贝到任何一个PATH目录下。第二种方法是生成一个LSET.BAT文件,在每次使用PC-LINT前先运行它来

11、设置路径,或者把LSET.BAT文件的内容拷贝到AUTOEXEC.BAT文件中。建议选择第一种方法,指定的目录为安装目录。,Pclint 配置小结,上面采用config.exe 图形工具完成了配置。也可以采用手工过程进行配置。1.将pclint.rar解压至c:,这样lint文件就位与c:pclint(安装目录)下了。2.将c:pclintlnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至c:pclint下,3.在安装目录下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下,Pclint 配置小结,3.在安装目录下创

12、建std.lnt和options.lnt两个文件,其中std.lnt的内容如下d: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 FilesM

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

14、将pclint集成到VC6中去,先配置lint使之能对单个C或C+文件进行检查,集成到Microsoft Visual C+6,打开VC6,tools-customize-tools 新建一个名为pclint for unit check的项,在下面填入command:C:pclintlint-nt.exearguments:-u c:pclintstd.lnt$(FilePath)“Use Output Window 打上勾close 完成。这样,在VC窗口tools菜单下应该多了一个pclint选项,可以用它来运行lint程序,对单个c/c+代码进行静态检查了。,-u 指明使用哪些.lnt

15、文件,首先导出当前工程的.lnt文件方法如下:,检查当前活动工程中的所有源文件的设置方法,导出当前工程的.lnt文件,Command:C:PCLint8LINT-NT.EXEArguments:+linebuf$(TargetName).dsp$(TargetName).lntInitial directory:$(TargetDir)Command:Lint-nt.exe文件及其绝地路径(如果路径中有空格,路径要用“”)。+linebuf$(TargetName).dsp$(TargetName).lnt参数+linebuf表示加倍行缓冲的大小,最初是600 bytes,行缓冲用于存放当前行

16、和你读到的最长行的信息。$(TargetName)是VC集成开发环境的环境变量,表示当前激活的Project名字注意要选中“Use Output Window”选项,这样PC-Lint就会将信息输出到Output窗口中。在Initial directory 的$(TargetDir)表示在这个目录(project 所在目录的debug)下执行此命令,如果不指定,则将.lnt文件存放在project 文件所在的目录下。,导出当前工程的.lnt文件,检查当前活动工程中的所有源文件的设置方法,不写该部分的话,直接在输出窗口中显示信息。否则,将分析结果显示在叔叔窗口中,检查当前活动工程中的所有源文件的

17、设置方法,打开VC6,tools-customize-tools 新建一个名为pclint for project check的项,在下面填入command:C:pclintlint-nt.exearguments:+ffn u c:PC-Lintstd.lnt$(TargetName).lnt Initial directory:.$(TargetDir)(与前一步的设置一致)Use Output Window 打上勾close 完成。参数中+ffn表示Full File Names,LINT对常见错误的检查,1.检测指针的错误使用Lint对使用空指针,指针越界,对常量内容的更改等。,int

18、 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语句中的错误对于if语句中经常出现的把”=”写成”=”的错误,能够通过lint检测出来。,int main()char x100,c;char*p=x;if(c300)/*错误*/*p=1;if(c=20)/*错误*/*p=1;,对于如下if语句的问题,也能检测出来:if(xi big);/*错误号72

19、1,可疑的分号;用法*/big=xi;能够检测出代码中if语句之后的可疑的正缩进格式:if(xi big)big=xi;y=big;/*错误号539,此行不应该正缩进*/能够检测出代码中if语句之后的可疑的负缩进格式: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:/*两个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;,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号