实验一 单元静态测试工具pclint的使用(1)
PCLINT代码静态测试工具
最近学习了静态测试工具pclint,觉得它的功能很强大,可以检查出编译器发现不了的逻辑错误,还可以与Source Insight\VC集成,这里先推荐网上的两篇文章,讲述的非常好,完全可以跳过不看以下的介绍.工具的使用很简单,需要实际使用过程逐步地积累经验,了解LOG控制参数,和错误信息的含义.第一篇详细地讲述了PCLINT的入门到深入,有详细的例子:/content/10/0323/15/610539_19931453.shtml第二篇比较简单地介绍了入门遇到的问题,例如如何配置std.lnt:/denglei99/blog/item/8d4be12465024b318744f9e9.html第三篇是PCLINT软件包中自带的帮助文档,很全面,但是英文版本的,第一篇文章很多内容是从这里直接翻译过去的。
在软件包中的C:\PCLint8\pc-lint.pdf,主要是关注17章的错误码的描述.一、PCLINT的优点PC-Lint则偏重于代码的逻辑分析,它能够发现代码中潜在的错误,比如数组访问越界、内存泄漏、使用未初始化变量等,它的检查主要涉及到如下:强类型检查、变量值跟踪、赋值顺序检查、弱定义检查、格式检查、缩进检查、const变量检查、volatile变量检查等。
PC-Lint的错误信息很有规律,也可以通过添加语句的方式来屏蔽不必要的信息。
下面是PC-Lint错误码分布情况:错误说明C C++告警级别语法错误1-1991001-11991内部错误200-2990致命错误300-3990告警400-6991400-16992消息700-8001700-18993可选信息900-9991900-19994PC-Lint的检查分很多种类,有强类型检查、变量值跟踪、语义信息、赋值顺序检查、弱定义检查、格式检查、缩进检查、const变量检查和volatile变量检查等等。
对每一种检查类型,PC-Lint都有很多详细的选项,用以控制PC-Lint的检查效果,屏蔽不必要的信息。
PC-lint简明教程(CC++静态代码检查工具)
PC-lint简明教程(CC++静态代码检查⼯具)前⾔PC-lint是⼀款⼩⽽强⼤的C/C++静态代码检查⼯具,它可以检查未初始化变量,数组越界,空指针等编译器很难发现的潜在错误。
在很多专业的软件公司如Microsoft,PC-Lint检查⽆错误⽆警告是代码⾸先要过的第⼀关。
安装配置有关安装步骤,请参考附录中的⽂章“静态代码检查⼯具PC-Lint“的“4 PC-Lint软件使⽤⽅法”,不过该⽂章使⽤的是VC++ 6.0的开发环境,最新的PC-lint 9.0⽀持VS2008,可以在安装过程中⾃⼰选择。
关于PC-lint和VS2008的集成,请参考PC-Lint安装⽬录下的env-vc9.lnt⽂件,⾥⾯讲解的⾮常之详细,不必参考“静态代码检查⼯具PC-Lint”这篇⽂章中的该段内容(如果你的E⽂不是很好,那参考⼀下中⽂还是有帮助的)。
在env-vc9.lnt⽂件中的Simple Check部分,有如下⼀段内容:Arguments: -i"c:/lint" std.lnt env-vc9.lnt "$(ItemFileName)$(ItemExt)"建议使⽤以下⼀段新的Arguments:Arguments: -i"c:/lint" std.lnt env-vc9.lnt "$(ItemDir) $(ItemFileName)$(ItemExt)"作⽤是在检查代码的⽣成结果中,可以双击某⼀个检查结果直接定位到代码中的某⼀⾏,缺点是检查结果会更长⼀点,因为它使⽤了全路径。
依照env-vc9.lnt的说明配置完成后,在VS2008的Tools菜单下会有四个PC-lint的选项,如下图所⽰。
常见错误1. 在PC-lint的Configuration向导结束后,会在PC-lint的安装⽬录下⽣成std.lnt⽂件,⾥⾯有⼀⾏:options.lnt -si4 -sp4如果按照“静态代码检查⼯具PC-Lint“⾛完所有的标准配置的话,options.lnt会⾃动⽣成,但⽆内容(注释除外),如果中间某⼀步skip了,可能该⽂件就不会⽣成,这时就需要⼿动创建⼀个options.lnt⽂件,或在std.lnt中注释掉options.lnt,否则会在使⽤PC-lint时会出现找不到options.lnt的错误。
PC-lint安装及使用总结
PC-lint研究总结1. PC-lint总体介绍 (2)2. 安装和配置 (2)2.1 安装 (2)2.2 配置 (3)3. 使用方法 (14)3.1 命令行方式 (14)3.2 集成到IDE方式 (15)3.2.1 集成到VC中 (15)3.2.2 集成到CB中 (17)3.2.3 集成到SI中 (20)3.2.4 集成到UE中 (23)3.3 makefile方式 (24)3.3.1 GNU Make和makefile介绍 (24)3.3.1.1 GNU Make (24)3.3.1.2 makefile 基本结构 (25)3.3.1.3 makefile 变量 (26)3.3.1.4 GNU make 的主要预定义变量 (26)3.3.1.5 隐含规则 (27)3.3.2 平台的makefile结构 (27)3.3.2.1 平台级 (28)3.3.2.2 子系统级(以支撑为例) (28)3.3.2.3 平台makefile的调用方式 (29)3.3.3 平台makefile同PC-lint的集成 (29)4. 平台推广方案(建议) (34)4.1 推广使用的前提 (34)4.2 个人的使用方案 (34)4.3 子系统的检查人的使用方案 (34)4.4 特殊情况处理方法 (34)1. PC-lint总体介绍PC-Lint/FlexeLint for C/C++是GIMPEL SOFTWARE公司的产品,是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。
它除了可以检查出一般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。
C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。
PC-Lint识别并报告C语言中的编程陷阱和格式缺陷的发生。
它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。
PCLint使用指南
Copyright 2008 Authors: Liu Feixiang Email : openlek@ This LICENSE page is part of An Overview on Numerical Analysis Software, You cannot remove the License page. Permission is granted to copy, distribute and/or modify this document, provided the text of this NOTICE is retained, a notice that the code was modified is included with the above COPYRIGHT NOTICE and with the COPYRIGHT NOTICE in the LICENSE file, and that the LICENSE file is distributed with the modified code. Specifically, I want to make sure that you have the right to share copies. LICENSOR MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. MAKES NO REPRESENTATIONS OR WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANYPARTICULAR PURPOSE OR THAT THE USE OF THE LICENSED SOFTWARE COMPONENTS OR DOCUMENTATION WILL NOT INFRINGE ANY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.
PC-Lint 代码静态分析工具
PC-Lint代码静态分析工具实验目的:掌握代码静态分析工具使用方法。
实验内容及步骤:PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器。
它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。
C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。
PCLint识别并报告C语言中的编程陷阱和格式缺陷的发生。
它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。
软件除错是软件项目开发成本和延误的主要因素。
PClint能够帮你在程序动态测试之前发现编码错误。
这样消除错误的成本更低。
使用PC-Lint在代码走读和单元测试之前进行检查,可以提前发现程序隐藏错误,提高代码质量,节省测试时间。
并提供编码规则检查,规范软件人员的编码行为。
1 VC6.0环境中集成pclint的步骤1.将pclint.rar解压至c:\, 这样lint文件就位与c:\pclint(安装目录)下了。
2.将c:\pclint\lnt 下的3个文件lib-w32.lnt,env-vc6.lnt,co-msc60.lnt拷贝至c:\pclint下,再在安装目录下创建std.lnt和options.lnt两个文件,其中std.lnt的内容如下// contents of std.lntc:\pclint\co-msc60.lntc:\pclint\lib-w32.lntc:\pclint\options.lnt -si4 -sp4-i"D:\Program Files;D:\Program Files\Microsoft Visual Studio\VC98\Include"//end其中-i后面的路径名为VC的安装路径和VC Include 文件路径,根据自己的修改便可。
PC-Lint工具使用说明书
PC-Lint工具使用说明书1.使用操作步骤1、将lint.rar拷贝到C:\根目录下;解压缩,文件产生在C:\lint目录下;目录中已经包括配置好的两个工作目录:C:\lint\config_diab //针对Diab编译器C:\lint\config_vc //针对Vc6.0编译器2、将C:\lint\config_diab目录下lin.bat拷贝到代码文件根目录下,如9000改进项目的E:\PM-8000\03.Code\9210下。
建立工程中所有*.cpp文件信息,在Dos命令提示符中代码文件根目录下键入如下命令,E:\PM-8000\03.Code\9210>dir /s /b *.cpp >fs_all.lnt3、lin.bat的编辑,将lin.bat改成如下:"C:\lint\Lint-nt" +v -i"C:\lint\config_diab;c:\diab\4.3g\include;res;include;system;drivers;menudrv; modules;modules/co;modules/ecga;modules/ibp;modules/keyboard;modules/nibp;modul es/recorder;modules/spo2;modules/co2;modules/ag;modules;net;trend;prs " std.lnt -os(_LINT.TMP) %1 %2 %3 %4 %5 %6 %7 %8 %9@echo offecho ---echo output placed in _LINT.TMP"C:\lint\CountErrs"-i的参数包括两部分:C:\lint\config_diab;指明配置文件std.lnt的路径;其他指明相关头文件的路径;"C:\lint\CountErrs"指的是对输出结果的执行文件。
PC-Lint工具使用说明书
PC-Lint工具使用说明书1.使用操作步骤1、将lint.rar拷贝到C:\根目录下;解压缩,文件产生在C:\lint目录下;目录中已经包括配置好的两个工作目录:C:\lint\config_diab //针对Diab编译器C:\lint\config_vc //针对Vc6.0编译器2、将C:\lint\config_diab目录下lin.bat拷贝到代码文件根目录下,如9000改进项目的E:\PM-8000\03.Code\9210下。
建立工程中所有*.cpp文件信息,在Dos命令提示符中代码文件根目录下键入如下命令,E:\PM-8000\03.Code\9210>dir /s /b *.cpp >fs_all.lnt3、lin.bat的编辑,将lin.bat改成如下:"C:\lint\Lint-nt" +v -i"C:\lint\config_diab;c:\diab\4.3g\include;res;include;system;drivers;menudrv; modules;modules/co;modules/ecga;modules/ibp;modules/keyboard;modules/nibp;modul es/recorder;modules/spo2;modules/co2;modules/ag;modules;net;trend;prs " std.lnt -os(_LINT.TMP) %1 %2 %3 %4 %5 %6 %7 %8 %9@echo offecho ---echo output placed in _LINT.TMP"C:\lint\CountErrs"-i的参数包括两部分:C:\lint\config_diab;指明配置文件std.lnt的路径;其他指明相关头文件的路径;"C:\lint\CountErrs"指的是对输出结果的执行文件。
PC-lint使用文档
PC-lint使用说明1.概述PC-Lint/FlexeLint 是一款代码静态分析工具,它的作用就是查找C/C++程序的错误与缺陷(bugs),分析代码存在的潜在问题,比编译器更要严格。
2.PC-lint安装安装步骤如下:一、运行pclint9setup.exe开始安装二、在完成安装之前,去掉勾选I want to run the configuration now,单击Finish完成安装三、最后将patch目录的所有文件复制到安装目录,执行ptahc.bat批处理文件安装完成后可执行下面的命令查看版本号:C:\lint>lint-nt.exe -vPC-lint for C/C++ (NT) Vers. 9.00e, Copyright Gimpel Software 1985-20103.配置PC-lint安装完成之后需配置PC-lint。
一、如下图所示,从应用程序中选择PC-lint CONFIG,此部也可以在安装完成时进行,只要勾选I want to run the configuration now即可配置。
二、进入配置界面,单击下一步三、下一步,选择C:\lint(这个是pc lint的安装目录),Create a new STD.LNT四、下一步,弹出警告,选择是五、选择编译环境,Microsoft Visual C++ 2005 (co-msc80.lnt)六、选择32-bit Flat Model(-ms, -si4, -sp4)七、根据需要选择支持的库,Active Template Library(ATL),Microsoft Foundation Class Library,Standard Template Library,Windows 32-bit八、选择Scott Meyers(Effective C++ More Effective C++ and Effective C++ 3rd Edition),Dan Saks,MISRA 2004九、选择Create -i options十、选择包含目录,此处将VC的包含目录加进去,如下所示:C:\Program Files\Microsoft Visual Studio 8\VC\atlmfc\includeC:\Program Files \Microsoft Visual Studio 8\VC\includeC:\Program Files \Microsoft Visual Studio 8\VC\PlatformSDK\Include十一、CONFIG确定十二、是否要创建另外一个配置,否十三、Questionnaire选择No十四、Environment选择(env-vc8.lnt) Microsoft's Visual C++.NET 2005十五、Batch Files选择Prepend my PC-lint directory to my PATH(create LSET.BAT)最后完成配置。
PC-lint配置及使用说明
1.1简介如果要给lint工具下一个形象点的定义,那就是:一种更加严格的编译器。
它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。
请看下面的例子:1:char *report( int m, int n, char *p )2:{3:int result;4:char *temp;5:long nm;6:int i, k, kk;7:char name[11] = "Joe Jakeson";8:nm = n * m;9:temp = p == "" ? "null" : p;10:for (i = 0; i < m; ++i)11:{12:k++;13:kk = i;14:}15:if (k == 1) result = nm;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使用指南
PC-Lint使用指南1简介PC-Lint是一个历史悠久,功能强大的静态代码检查工具,它不仅可以检查出很多语法逻辑上的隐患,还能帮助提出程序在空间利用、运行效率上的改进点,很多专业的软件公司将PC-Lint检查无错误无警告作为代码首先要过的第一关。
PC-Lint主要有以下功能特点:⏹PC-Lint是一种静态代码检查工具,可以说,PC-Lint是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全符合语法要求,但很可能是潜在的、不易发现的错误。
⏹PC-Lint不但可以检查单个文件,也可以从整个项目的角度来检查问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件。
⏹PC-Lint支持几乎所有流行的编辑环境和编译器,例如Borland C++从1.x到5.x各个版本、Borland C++ Build、GCC、VC,、watcom C/C++、Source insight、UltraEdit等等。
⏹支持MISRA规则检查和支持Scott Meyes的名著(Effective C++/More EffectiveC++)中说描述的各种提高效率和防止错误的方法。
2使用方法随本文一起提供的PC-Lint是一个不用安装的版本,为了方便起见,直接解压到c:\pclint 目录。
PC-Lint重要文件的说明:⏹LINT-NT.EXE:可执行文件,已升级到v8.00w。
⏹PATCH.EXE:用于升级版本的工具。
⏹msg.txt:消息描述文件,描述了各种警告信息。
⏹pc-lint.pdf:PC-Lint在线手册。
⏹readme.txt:在线手册的补充。
⏹lnt\co-xxx.lnt 编译器选项文件。
env-xxx.lnt 编辑环境选项文件。
lib-xxx.lnt 库相关的选项文件。
sl-xxx.lnt 非ANSI编译器的标准库模块。
PC LINT使用说明(newest)
PC LINT使用说明(newest)pc-lint使用说明(newest)PC lint指令1.概述............................................................................ .........22.如何安装pc-lint..................................................................33.lint 一个c文件.. (3)3.1命令行4的lint3.2在sourceinsight中集成............................................................................ .. (4)3.3林特选项六4.lint一个工程下的多个c文件 (7)4.1为什么lint多个C文件74.2如何在一个项目下lint多个C文件84.3简单lint 多个文件5.通过准则 (10)第一类:无法显示的警告信息10第二类:需要确认的警告106.pc-lint的配置 (11)附录I选项lnt。
12附录II标准lnt 14附录III环境Si lnt。
十四lint工具是一种软件质量保证工具,许多国外的大型专业软件公司,如微软公司,都把它作为程序检查工具,在程序合入正试版本或交付测试之前一定要保证通过了lint检查,他们要求软件工程师在使用lint时要打开所有的编译开关,如果一定要关闭某些开关,那么要给出关闭这些开关的正当理由。
可以想象,如果我们在编码后第一次编译程序时使用lint检查程序,并确保消除错误有的lint告警,我们就不会遇到象今天这么多的告警信息。
即使在今天,我们如果能抽出一定的精力来消除程序中的lint告警,以后再维持这种无告警状态就是很容易的了。
我们程序质量的提高也是不言而喻的。
PC lint是gimpels软件公司的产品。
静态检查工具——PClint
静态检查⼯具——PClint简介: pc_lint是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析⼯具,它的全称是PC-Lint/FlexeLint for C/C++, pc_lint能够在Windows、MS-DOS和OS/2平台上使⽤,以⼆进制可执⾏⽂件的形式发布,⽽FlexeLint 运⾏于其它平台,以源代码的形式发布。
⼯具类型:静态⼯具。
⽀持平台:Windows。
使⽤⽅法:可配置到VS外部⼯具,也可以直接命令进⾏检查。
输出⽂件:直接在VS输出窗⼝中输出。
或者输出到⽂件 查看问题:如果在VS窗⼝输出,双击报错⾏,可以直接跳转到问题代码位置。
检查范围: pc_lint不仅能够对程序进⾏全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使⽤空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利⽤、运⾏效率上的改进点。
从某种意义上说。
pc_lint是⼀种更加严格的编译器,它除了可以检查出⼀般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。
pc_lint的注释: //lint -save -e*** 代码段;//带有error ***的告警信息 //lint –restoreVS2005配置⽅法: 1、⾸先,将获取到的pc_lint压缩包解压到C盘根⽬录,注意放到其他⽬录会导致pc_lint不好⽤。
2、配置VS路径:打开pc_lint对VS的配置⽂件(C:\pclint\std_VS2005.lnt),配置好本地的VS路径,如下图所⽰。
3、配置将要检测的本地代码路径:继续配置刚刚的⽂件(C:\pclint\std_VS2005.lnt),⼀键替换成要检测的本地代码路径。
(此处很重要,每次进⾏⼯程检测时,都需要重新替换,保证检测的⼯程能对得上) 4、修改检测规则配置:打开检测规则配置⽂件(C:\pclint\options.lnt),如下图:类型1代表当前的检测规则;类型2这种⾸位出现//的都算作是注释,和没写⼀样;类型3代表屏蔽的检测规则。
PC-Lint使用报告
1.安装PC-Lint安装和PC-Lint在Keil中配置见《使用教程》2.配置.lnt文件Keil安装路径\ARM\BIN\CO-RV.LNT添加:-w4 //生成所有信息-os(D:\result.txt) //输出结果到文件result.txt3.PC-Lint代码检查功能PC-Lint能够检查出很多语法错误和语法上正确的逻辑错误,PC-Lint为大部分错误消息都分配了一个错误号,编号小于1000的错误号是分配给C 语言的,编号大于1000的错误号则表1以C语言为例:编号1-199指的是一般编译器也会产生的语法错误;编号200-299是PC-Lint程序内部的错误,这类错误不会出现在代码中的;编号300-399指的是由于内存限制等导致的系统致命错误;编号400-999中出现的提示信息,是根据隐藏代码问题的可能性进行分类的,指的是被检查代码中很可能存在问题而产生的告警信息;编号700-899中出现的信息,产生错误的可能性相比告警信息来说级别要低,但仍然可能是因为代码问题导致的问题;编号900-999是可选信息,他们不会被默认检查,除非你在选项中指定检查他们。
PC-Lint告警级别分为以下几个级别,缺省告警级别为3级:-w0 不产生信息(除了遇到致命的错误)-w1 只生成错误信息-- 没有告警信息和其它提示信息-w2 只有错误和告警信息-w3 生成错误、告警和其它提示信息(这是默认设置)-w4 生成所有信息4.FCA温度校准程序4.1FCA温度校准程序PC-Lint配置文件《CO-RV.LNT》CO-RV.LNT4.2FCA温度校准程序Lint输出结果《FCA_TempCalibration_result.txt》FCA_TempCalibration_result.txt4.3输出结果统计见表2、3、4,有6种语法、36种告警和41种消息错误常见错误如,40:变量未声明;91:行字符数超过600;506:固定的布尔值;525:缩排格式错误;527:无法执行到的语句;534:忽略函数返回值;616:在switch语句中未使用break;715:变量未引用;722:语句结束符“;”用在for()或者while()后面;734:赋值过程中精度丢失;表2表3表45.舵机程序5.1舵机程序PC-Lint配置文件《co-iar80.lnt》co-iar80.lnt5.2舵机程序Lint输出结果《STM8_SERVO_result.txt》STM8_SERVO_result.txt5.3输出结果见表5、6、7,有16种语法、10种告警和23种消息错误表5表6表76.对比分析6.1语法错误对比对比表2和表5,错误类型10、14和40在两个程序都有出现。
pclint用法
pclint用法
PCLint是一款静态代码分析工具,它广泛用于开发者在编写代码时的错误检查和优化。
下面是使用PCLint的步骤:
1. 安装并配置PCLint
首先,你需要在你的电脑上安装PCLint,并配置好其环境变量。
在此过程中,你需要根据你的具体操作系统和安装版本,查找相应的安装和配置教程,进行操作。
2. 编写代码并保存
接下来,你需要编写代码并将其保存为一个或多个源代码文件,以便后续进行静态代码分析。
在保存过程中,需要注意文件名和文件路径,不能包含任何空格或特殊字符,也需要与实际的项目结构相对应。
3. 运行PCLint
在编写完代码并保存后,你需要运行PCLint对代码进行检测。
这个过程通常需要在命令行终端中执行,具体操作步骤如下:(1)打开命令行终端,并进入代码所在的目录;
(2)输入指令“pclint filename.c”(其中filename.c是你要进行检测的源代码文件名),并执行。
4. 查看输出结果
在代码分析过程中,PCLint会输出一系列有关代码中潜在错误、警告和建议的信息。
这些信息通常包含在一个文本文件中,你需要在命令行终端中打开该文件,并进行分析和处理。
总结来说,使用PCLint进行静态代码分析,需要先安装并配置好PCLint,然后编写代码并保存,最后在命令行终端中运行PCLint并查看分析结果。
这个过程需要仔细操作并遵循一定的规范,以确保PCLint能够准确地检测到代码中存在的问题和优化空间。
使用PCLint 进行代码静态检查步骤及注意点
使用PCLint 进行代码静态检查步骤及注意点第一步:安装与配置pclint第二步:安装vc++6.0,因为本文以编译器vc6为例子第三步:将pclint集成到vc6.0中第四步:注意点下面详细说明:第一步:安装与配置pclintPC-lint软件性价比高,易于学习,容易推广和固化到软件开发测试流程中去,所以在全世界得到了广泛的应用。
PC-lint使用方法很简单,可以用命令行方式进行,例如lint-nt –u std.lnt test1.c test2.c test3.c 也可以使用MAKEFILE 的方式。
此外,它还可以集成到很多开发环境或常用的代码编辑软件中,比如集成到Source Insight/SLICKEDIT/MS VC6.0/KEIL C..等。
PC-Lint还支持Scott Meyes的名著(Effective C++/More Effective C++)中说描述的各种提高效率和防止错误的方法。
PC-lint的安装非常简单,以PC-lint 8.0为例,运行安装程序将其释放到指定的安装目录即可,比如c:\pclint8。
然后需要运行PC-lint的配置工具config.exe生成选项和检查配置文件,以刚才的安装路径为例,config.exe 应该位于:C:\pclint8\config.exe。
配置文件是代码检查的依据,PC-lint自带了一个标准配置文件std.lnt,但是这个文件没有目录包含信息(头文件目录),通常对代码检查的时候都需要指定一些特殊的包含目录,所以要在标准配置的基础上生成针对某个项目代码检查的定制配置。
下面就以Microsoft Visual C++ 6的开发环境为例,介绍一下定制配置的过程。
运行C:\pclint8\config.exe后出现一个欢迎界面,提示版权信息,如图4.1所示:图4.1 配置欢迎窗口点击“下一步”按钮出现pc-lint.exe命令行使用说明窗口(图4.2所示):图4.2 pc-lint.exe命令行使用说明窗口点击“下一步”按钮继续,接着是选择创建或修改已有配置文件STD.LNT的选项:图4.3 选择如何使用配置文件STD.LNT因为我们是第一次配置,所以选择上面一个选项“Create a new STD.LNT”,这样做不会修改已有配置文件STD.LNT的内容,而是创建一个新的STD_x.LNT文件,文件名中的x是从“a”到“z”26个英文字符中的任意一个,一般是按顺序排列,从“a”开始。
静态代码检查工具PC-Lint的使用方法
静态代码检查工具PC-Lint(一)摘要:C/C++语言的语法拥有其它语言所没有的灵活性,这种灵活性带来了代码效率的提升,但相应增加了代码中存在隐患的可能性。
静态代码检查工具PC-Li nt则偏重于代码的逻辑分析,它能够发现代码中潜在的错误,比如数组访问越界、内存泄漏、使用未初始化变量等。
本文将介绍如何安装和配置PC-Lint代码检查工具以及如何将PC-Lint与常见的代码编辑软件集成。
关键词:代码检查PC-Lint 规则选项目录摘要1 引言2 PC-Lint介绍3 PC-Lint的代码检查功能3.1 强类型检查3.2 变量值跟踪3.3 赋值顺序检查3.4 弱定义检查3.5 格式检查3.6 缩进检查3.7 const变量检查3.8 volatile变量检查4 PC-Lint软件使用方法4.1 安装与配置4.2 PC-Lint与常用开发工具的集成(Visual C++,Source Insight,UEdit)5 总结参考文献附录一PC-Lint 重要文件说明附录二错误信息禁止选项说明附录三PC-Lint检测中的常见错误一引言C/C++语言的语法拥有其它语言所没有的灵活性,这种灵活性带来了代码效率的提升,但相应也使得代码编写具有很大的随意性,另外C/C++编译器不进行强制类型检查,也不做任何边界检查,这就增加了代码中存在隐患的可能性。
如果能够在代码提交测试之前发现这些潜在的错误,就能够极大地减轻测试人员的压力,减少软件项目的除错成本,可是传统的C/C++编译器对此已经无能为力,这个任务只能由专用的代码检查工具完成。
目前有很多C/C++静态代码检查工具,其中Logiscope RuleChecker和PC-Lint是目前应用比较广泛的两个工具。
这两个检查工具各有特色,Logiscope RuleChecker倾向于代码编码规范的检查,比如代码缩进格式、case语句书写规范、函数声明和布尔表达式的编写规则等,而PC-Lint则偏重于代码的逻辑分析,它能够发现代码中潜在的错误,比如数组访问越界、内存泄漏、使用未初始化变量等。
PC-LINT 简明使用手册
PC-LINT 简明使用手册版本:1.0(版权所有,翻版必究)目录1前言 (3)2软件版本 (3)3功能 (3)4安装与配置 (3)4.1安装 (3)4.2配置 (4)5使用说明 (4)5.1命令行下使用pclint (4)5.2Tornado下使用pclint (6)5.3Source Insight下使用pclint (9)5.4UltraEdit下使用pclint (12)5.5VC++ 6下使用pclint (14)5.6其他说明 (14)6参考文档 (15)6.1《Reference Manual for PC-lint/FlexeLint》Gimpel Software (16)1 前言PC-Lint是由Gimpel Software出品的,一个历史悠久的,功能异常强劲的C/C++代码静态代码检测工具。
随着C语言的诞生它也随之诞生了,经过30来年的发展,它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误。
C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。
PC-Lint不但能够监测出许多语法逻辑上的隐患,它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码,等等。
而且也能够有效地帮你提出许多程序在空间利用、运行效率上的改进点,这时候,PC-Lint的强劲功能可以很好地提高软件的质量。
2 软件版本当前使用的版本为PC-lint for C/C++ Version 8.00e。
3 功能3.1PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。
3.2PC-Lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而PC-Lint在检查当前文件的同时还会检查所有与之相关的文件,可想而知,它会对我们有很大的帮助。
pclint的使用技巧
pclint的使用技巧pclint的一些使用技巧1 pclint认为代码存在风险就会提出警告。
警告的处理方法有两个:1 修改代码,消除警告。
2 屏蔽警告。
如果认为该类警告没有影响,可以全局忽略,就在ignore.lnt里屏蔽掉。
如果认为该类警告还是有用的,且代码已经人为检查过了,没问题。
就在该行上加注释,只忽略该行的警告。
例如,/*lint !e1762*/2 忽略警告的方法:1 在全局文件ignore.lnt中忽略。
请慎用。
2 忽略文件里某种类型的警告,在源文件开头加上注释,例如: /*lint -e818*/3 忽略单个警告。
在产生警告的行上加注释,例如: /*lint !e1762*/3 现存问题:1 对结构体里的指针,没有检查的机制4 获取支持1 pclint的论坛,找不到检查方法时,可以去官网的论坛搜搜2 PC-lint.pdf第11章值得读一读。
一些高级的用法会用到5 一些技巧* 声明函数可能返回空指针,直接使用返回值会产生警告//lint -sem( soap_help_insert, r_null )char *soap_help_insert(const char *value, const char *text);* 指示函数的参数可能为空,直接使用参数会产生警告//lint ++fpnvoid myFunction1(char *p) {*p=1;}void myFunction2(char *p) {*p=1;}//lint --fpn* 内存泄漏返回申请内存的函数前增加//lint -sem(myAlloc, @p == malloc(10) || @p == 0)释放内存的函数前增加//lint -sem(myFree, custodial(1))* 声明某些函数危险,禁止使用在全局文件ignore.lnt中增加-function(gets, strcpy)* 句柄泄漏//已支持fopen句柄的检查//lint -sem(fopen, @p == malloc(10) || @p == 0)//lint -sem(fclose, custodial(1))。
PC-lint的配置及使用
PC-lint的基本使用方法 PC-lint的基本使用方法
PC-lint配置文件介绍 配置文件介绍
由命令行参数决定使用哪个配置文件 配置文件可包含多个配置选项 如在std_a.lnt配置文件中可包含以下内容: -iD:\VC\VC98\Include 配置文件可包含其它配置文件 如在std_a.lnt配置文件中可包含以下内容: options.lnt
选项文件,采用 选项文件,采用Scoot Meyers的编程建议 的编程建议 用户自定 义的选项 文件
au-sm123.lnt 对VC6的告警屏蔽文件 的告警屏蔽文件 co-msc60.lnt lib-w32.lnt lib-wnt.lnt 库头文件的告警屏蔽文件 options.lnt -si4 -sp4 -iD:\software\VC\VC6自解压完美版第二版\VC98\Include
软件配置管理
PC-lint的配置和使用
PC-lint的配置及使用 PC-lint的配置及使用
实验目的 背景知识 实验内容 实验步骤
实验目的
在掌握软件配置管理相关理论的基础 通过实际操作来理解PC-lint系统的配 上,通过实际操作来理解 系统的配 置和使用, 置和使用,培养分析和解决实际问题的能 并增强动手能力。具体目的如下: 力,并增强动手能力。具体目的如下
选择工程类型
使用PC使用PC-lint PC
添加源文件
使用PC使用PC-lint PC
文件内容(部分) 文件内容(部分)
char *report (int m,int n, char *p) { int result; char *temp; long nm; int i, k, kk; char name[11] = "Joe Jakeson"; nm=n*m; temp = p == "" ? "null" : p; for( i = 0; i < 13; i++) { k++;kk = i;} if( k== 1 ) result = nm; else if( kk > 0 ) result = 1; else if( kk < 0 ) result = -1; if(m == result ) return( temp ); else return ( name ); }
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2.在下面填入command:C:\lint\lint-nt.exe
3.arguments:-u -ic:\lint std.lnt $(FileName)
4.initial directory:$(FileDir)
e Output Window打上勾
6.close完成。
shiyan2.c(51) : Info 716: while(1) ...
_
2、Delay();
shiyan2.c(56) : Warning 522: Highest operation, function 'Delay', lacks
side-effects、
intscoreMath;
intscoreMusic;
};
void main()
{
struct STUDENT stu[30] = {{1,"杨过","男",{1999,12,20},90,83,72,82},{2,"郭靖","男",{1999,07,06},78,92,88,78},
{3,"小龙女","女",{1999,07,06},89,72,98,66},{4,"郭襄","女",{1999,07,06},78,95,87,90}};
{
t->second=0;
t->minute++;
}
if (t->minute==60)
{
t->minute =0;
t->hour++;
}
if (t->hour==24)
t->hour=0;
printf("%2d:%2d:%2d\r", t->hour, t->minute, t->second);
这个在你VC窗口tools菜单下应该多了一个pclint选项,可以用它来运行lint程序,对你的c/c++代码进行静态检查了。
三、对下面的程序利用pclint做代码检查并分析报告的缺陷
检查程序一:
//利用指向结构体数组的指针计算学生各科的平均成绩
#include <stdio.h>
struct date
'struct STUDENT [30]'
检错:定义的STUDENT数组数列太小
2、for (pt=stu; pt<stu+4; pt++)
shiyan1.c(32) : Info 838: Previously assigned value to variable 'pt' has not
been used
}
}
检查程序二:
//用结构体模拟计时器
#include <stdio.h>
struct clock
{
int hour;
int minute;
int second;
};
typedef struct clock CLOCK;
void update(CLOCK *t)
{
t->second++;
if (t->second==60)
struct STUDENT *pt;
float sum[4] = {0.0},average[4] = {0.0};
inti;
pt = stu; /*pt指向结构体数组的第一个元素*/
for (pt=stu; pt<stu+4; pt++)
{
sum[0] = sum[0] + pt->scoreComputer;
update(&t);
ay();
}
return 0;
}
三、实验结果
代码一:
1、{3,"小龙女","女",{1999,07,06},89,72,98,66},{4,"郭襄","女",{1999,07,06},78,95,87,90}};
shiyan1.c(25) : Info 785: Too few initializers for aggregate 'stu' of type
实验一单元静态测试工具pclint的使用
实验步骤;
一、安装pclint
把压缩文件解压到c:\lint下。然后运行config程序。一步步按照下面的说明进行配置
这里选择“是”
这里选vc++ 6.x
这里选择“是”
这里选择“否”
二、在vc中加载pclint
打开VC6,tools--->customize-->tools
3、Info 754: local structure member 'date::day' (line 6, file shiyan1.c) not
referenced
shiyan1.c(6) : Info 830: Location cited in prior message
代码二:
1、while(1)
sum[1] = sum[1] + pt->scoreEnglish;
sum[2] = sum[2] + pt->scoreMath;
sum[3] = sum[3] + pt->scoreMusic;
}
for (i=0; i<4; i++)
{
average[i] = sum[i]/4;
printf(" %4.2f\n", *(average+i));
{
int year;
int month;
int day;
};
struct STUDENT
{
intstudentID;
charstudentName[10];
charstudentSex[4];
struct date timeOfEnter;
intscoreComputer;
intscoreEnglish;
}
void Delay(void)
{
long t;
for (t = 0; t < 500000000; t++)/*循环体为空语句的循环,起延时作用*/
{
;
}
}
int main(void)
{
CLOCK t;
t.hour=0;
t.minute=0;
t.second=0;
while(1)
{
if (t.minute==1) break;