使用PCLint进行代码静态检查步骤及注意点.docx
《使用PCLint进行代码静态检查步骤及注意点.docx》由会员分享,可在线阅读,更多相关《使用PCLint进行代码静态检查步骤及注意点.docx(17页珍藏版)》请在冰豆网上搜索。
使用PCLint进行代码静态检查步骤及注意点
使用PCLint进行代码静态检查步骤及注意点
第一步:
安装与配置pclint
第二步:
安装vc++6.0,因为本文以编译器vc6为例子
第三步:
将pclint集成到vc6.0中
第四步:
注意点
下面详细说明:
第一步:
安装与配置pclint
PC-lint软件性价比高,易于学习,容易推广和固化到软件开发测试流程中去,所以在全世界得到了广泛的应用。
PC-lint使用方法很简单,可以用命令行方式进行,例如lint-nt–ustd.lnttest1.ctest2.ctest3.c也可以使用MAKEFILE的方式。
此外,它还可以集成到很多开发环境或常用的代码编辑软件中,比如集成到SourceInsight/SLICKEDIT/MSVC6.0/KEILC..等。
PC-Lint还支持ScottMeyes的名著(EffectiveC++/MoreEffectiveC++)中说描述的各种提高效率和防止错误的方法。
PC-lint的安装非常简单,以PC-lint8.0为例,运行安装程序将其释放到指定的安装目录即可,比如c:
\pclint8。
然后需要运行PC-lint的配置工具config.exe生成选项和检查配置文件,以刚才的安装路径为例,config.exe应该位于:
C:
\pclint8\config.exe。
配置文件是代码检查的依据,PC-lint自带了一个标准配置文件std.lnt,但是这个文件没有目录包含信息(头文件目录),通常对代码检查的时候都需要指定一些特殊的包含目录,所以要在标准配置的基础上生成针对某个项目代码检查的定制配置。
下面就以MicrosoftVisualC++6的开发环境为例,介绍一下定制配置的过程。
运行C:
\pclint8\config.exe后出现一个欢迎界面,提示版权信息,如图4.1所示:
图4.1配置欢迎窗口
点击“下一步”按钮出现pc-lint.exe命令行使用说明窗口(图4.2所示):
图4.2pc-lint.exe命令行使用说明窗口
点击“下一步”按钮继续,接着是选择创建或修改已有配置文件STD.LNT的选项:
图4.3选择如何使用配置文件STD.LNT
因为我们是第一次配置,所以选择上面一个选项“CreateanewSTD.LNT”,这样做不会修改已有配置文件STD.LNT的内容,而是创建一个新的STD_x.LNT文件,文件名中的x是从“a”到“z”26个英文字符中的任意一个,一般是按顺序排列,从“a”开始。
STD_x.LNT文件的内容被初始化为STD.LNT内容的拷贝。
如图4.3所示,使用默认的PC-Lint路径,然后点击“下一步”按钮选择编译器:
接下来是选择编译器,在下拉框中选择自己使用的编译器。
这里我们选择“MicrosoftVisualC++6.x(co-msc60.lnt)”。
如果没有自己使用的编译器,可选择通用编译器“GenericCompilers”。
这个选项会体现在co-xxx.lnt文件中,并存放在前面我们选择的配置路径(C:
\PCLint8)下,在后面配置选项我们所选择的***.LNT均会被存放到这个路径下。
点击“下一步”按钮选择内存模式:
图4.5选择内存模式
可以根据自己程序区和数据区的实际大小选择一个恰当的内存模型,内存模型的选项会体现在STD.LNT文件或新创建的STD_x.LNT中。
因为我们的开发环境是32位的Windows,所以选择“32-bitFlatModel”,然后点击“下一步”按钮选择所要的支持库的配置信息:
图4.6选择软件库的配置信息
PC-Lint对现在常用的一些软件库都提供了定制的配置信息,选择这些定制信息有助于开发人员将错误或信息的注意力集中在自己的代码中,选择的支持库配置将被引入到STD.LNT文件或新创建的STD_x.LNT文件中。
选择常用的ATL、MFC、STL等配置,然后点击“下一步”按钮:
图4.7选择软件名人的编程建议
这是一个比较有意思的选项,就是让你选择是否支持为使用C/C++编程提出过重要建议的作者的一些关于编程方面的个人意见。
如果选择某作者的建议,那么他提出的编程建议方面的选项将被打开,作者建议的配置名为AU-xxx.LNT,建议全部选择,然后点击“下一步”按钮:
图4.8选择是否现在设置包含文件目录
接下来是选择用何种方式设置包含文件目录,如果选择使用-i方式协助设置包含文件选项,下一步就会要求输入一个或多个包含路径。
也可以跳过这一步,以后手工修改配置文件,-i选项体现在STD.LNT文件或新创建的STD_x.LNT文件中,每个目录前以-i引导,目录间以空格分隔,如果目录名中有长文件名或包含空格,使用时要加上双引号,如-i“E:
\ProgramFiles\MicrosoftVisualC++\VC98\Indlue”。
这里我们选择用-i方式协助我们来设置,然后点击“下一步”按钮:
图4.9选择是否现在设置包含文件目录
这一步就是在下面的文本框里可手工输入文件包含路径,用分号“;”或用ctrl+Enter换行来分割多个包含路径,或者可以点中Brows,在目录树中直接选择。
填完后点击“下一步”按钮:
图4.10提示std_x.lnt已经被创建
因为第三步选择了“CreateanewSTD.LNT”选项,所以出现以下对话框,表示std_x.lnt,std.lnt在配置路径下已被创建,这里的std_a.lnt实际上包含了std.lnt的信息,除此之外还有我们选择的包含路径和库配置信息。
单击“确定”按钮继续:
图4.11提示是否为其它编译环境创建配置文件
选择“确定”后,会接着提示是否为其它编译环境创建配置文件,如果选择“是”将从第四步开始创建一个新的配置文件。
这里我们选择“否”:
图4.12是否替换std.lnt文件
接下来会提示是否使用现在生成的std_x.lnt文件取代std.lnt文件。
如果选择“是”将会用std_x.lnt文件的内容覆盖std.lnt文件的内容,使得当前创建的配置选项成为以后创建新的配置文件时的缺省配置。
通常我们选择“否”继续下一步:
图4.13生成全局代码检查选项文件OPTIONS.LNT
接下来将会准备产生一个控制全局编译信息显示情况的选项文件OPTIONS.LNT,该文件的产生方式有两种,一种是安装程序对几个核心选项逐一解释并提问你是否取消该选项,如果你选择取消,则会体现在OPTIONS.LNT文件中,具体体现方式是在该类信息编码前加-e,后面有一系列逐一选择核心选项的过程。
如果选择第二种选择方式,安装文件会先生成一个空的OPTIONS.LNT文件,等你以后在实际应用时加入必要的选项。
这里选择“No”选项,即不取消这些选项,然后单击“下一步”:
图4.14选择所支持的集成开发环境
接着选择所支持的集成开发环境选项,可选多个或一个也不选,PC-Lint提供了集成在多种开发环境中工作的功能,例如可集成在VC、BC、SourceInsight中。
这里我们选择MicrosiftVisualC++6.0,这样env-v6.lnt就会被拷贝到配置路径中。
然后单击“下一步”:
图4.15选择LIN.BAT文件的使用方式
安装程序会生成一个LIN.BAT文件,该文件是运行PC-Lint的批处理文件,为了使该文件能在任何路径下运行,安装程序提供了两种方法供你选择。
第一种方法是让你选择把LIN.BAT拷贝到任何一个PATH目录下。
第二种方法是生成一个LSET.BAT文件,在每次使用PC-LINT前先运行它来设置路径,或者把LSET.BAT文件的内容拷贝到AUTOEXEC.BAT文件中。
建议选择第一种方法,指定的目录为当前PC-Lint的安装目录。
我们选择第一种方式:
“copyLIN.BATtooneofmyPATHdirectory”,然后单击“下一步”输入PATH目录:
图4.16指定PATH目录
输入安装目录C:
\PCLint8作为PATH目录,然后单击“下一步”按钮进入最后的确认窗口:
图4.17确认完成配置
到此就完成了PC-Lint的安装配置工作,单击“完成”按钮就可以使用PC-Lint了。
以上配置过程中在配置路径下产生的多个*.lnt文件,除了std.lnt、std_x.lnt和option.lnt为配置向导所生成,其它co-xxx.lnt、lib-xxx.lnt、env-xxx.lnt均是从原始安装目录中拷贝出来的,在这个目录下还有其它PCLint所支持的编译器、库及集成开发环境的lnt配置文件,所有的lnt文件均为文本文件。
上面的配置方法适合于刚开始接触PC-lint时使用,对于熟练的使用者可以直接编辑、编写各*.lnt配置文件安成上面的配置工作,或者定制出更适合自己使用的配置环境。
第二步:
安装vc++6.0,因为本文以编译器vc6为例子
略
第三步:
将pclint集成到vc6.0中
在集成开发环境中,PC-Lint8.0对VC++6和VC++7.0的支持是最完善的,支持直接从VC的工程文件(VC6是*.dsp,VC7是*.vcproj)导出对应工程的.Lnt文件,此文件包含了工程设置中的预编译宏,头文件包含路径,源文件名,无需人工编写工程的.Lnt文件。
下面是集成到的VC6中的tools设置说明,参见C:
\Lint8\lnt\env-vc6.lnt中的注释:
导出当前工程的.lnt文件(用来导出工程设置和源文件名,头文件包含路径),下面的对话框点击菜单的Tools->Customize->Tools可以看到。
图3.2.1.1
PC_LINT8.0ExportProject.Lnt
Command:
C:
\PCLint8\LINT-NT.EXE
Arguments:
+linebuf$(TargetName).dsp>$(TargetName).lnt
Initialdirectory:
$(TargetDir)\..
当修改过工程设置中的头文件包含路径、预编译宏或新增源文件后,需要重新导出工程的lnt文件,否则修改后的设置无法自动体现在工程的lnt文件中。
以上设置只要修改Command中的Lint-nt.exe所在路径即可。
执行过这个命令后,$(TargetName).lnt被放到$(TargetName).dsp所在目录中($(TargetDir)\..下),如果成功,打印出的返回值为0,如果失败则返回非零值,具体出错信息需查看$(TargetDir)\..\$(TargetName).lnt文件内容。
其中$(…)的字串为VC的参数宏,调用工具命令时VC将它们替换为对应的字符串。
$(TargetName)为当前激活的工程名(通过菜单Project->SetActiveProject设置当前激活工程,或在WorkSpace的工程树上右键对应的工程选择SetasActiveProjec),$(TargetDir)为当前激活工程输出目标文件所在路径(一般缺省为工程所在目录下的Debug或Release目录),具体参数宏的含义说明参考MSDN中的VC的使用指南。
在Initialdirectory的$(TargetDir)\..表示在这个目录下执行此命令。
注:
参数+linebuf表示加倍行缓冲的大小,最初是600bytes。
行缓冲用于存放当前行和你读到的最长行的信息。
检查当前激活工程中当前窗口中的源文件。
图3.2.1.2
PC_LINT8.0ForUnitCheck
Command:
C:
\PCLint8\LINT-NT.EXE
Arguments:
-i"C:
\PCLint8"-ustd.lntenv-vc6.lnt$(TargetName).lnt"$(FilePath)"
Initialdirectory:
$(TargetDir)\..
注意这一步最容易出错误。
。
与。
,路径不同,会出现找不到头文件的路径的情况
执行此命令前提是$(TargetDir)\..目录下已经有工程的$(TargetName).lnt文件,这个文件在步骤1中生成。
第一个参数-i"C:
\PCLint8"为lint搜索*.lnt文件的目录,这里就是我们的配置路径。
std.lnt就是前面配置过程中生成编译环境的配置文件,如果有需要支持多个编译环境,可以直接改成对应的配置文件名,例如这里可以改为std_a.lnt,表示使用std_a.lnt中所配置的编译环境设置。
最后一个参数"$(FilePath)"就是当前窗口中的带路径的源文件名。
需要注意的是,当前窗口中打开的源文件一定要属于当前激活的工程,否则lint可能会出错。
检查当前激活工程中的所有源文件。
图3.2.1.3
PC_LINT8.0ForProjectCheck
Command:
C:
\PCLint8\LINT-NT.EXE
Arguments:
+ffn-i"C:
\PCLint8"std.lntenv-vc6.lnt$(TargetName).lnt
Initialdirectory:
$(TargetDir)\..
执行此命令前提是$(TargetDir)\..目录下已经有工程的$(TargetName).lnt文件,这个文件在步骤1中生成。
此命令把$(TargetName).lnt中所包含的源文件lint一遍,如果工程比较大的话,一般输出的内容会超过VC的输出窗口的缓冲区大小,导致只能看到后面一部分Lint的信息,可以把Arguments改为
+ffn-i"C:
\PCLint8"std.lntenv-vc6.lnt$(TargetName).lnt>$(TargetName).txt
把结果输出到一个名为$(TargetName).txt的文件里。
注:
参数中的+ffn表示FullFileNames,可被用于控制是否使用的完整路径名称表示。
图4.19添加检查当前文件文件的定制命令
最后要添加一个检查整个工程的定制命令,检查整个工程的命令行是:
lint-nt.exe+ffn-i"C:
\PCLint8"std_g.lntenv-vc6.lnt$(TargetName).lnt>$(TargetName).chk
这个命令的结果就是将整个工程的检查结果输出到与工程同名的.chk文件中。
参数中+ffn表示FullFileNames,可被用于控制是否使用的完整路径名称表示。
下面就以一个简单的例子介绍一下如何在VC集成开发环境中使用PC-Lint。
首先新建一个“Win32ConsoleApplication”类型的简单工程(输出“HelloWorld”),然后将本文第二章引用的例子代码添加到工程的代码中,最后将这个工程代码所倚赖的包含目录手工添加到配置文件中,因为代码检查要搜索stdafx.h这个预编译文件,所以本例要手工添加工程代码所在的目录。
本文的例子生成的配置文件是std_g.lnt,用文本文件打开std_g.lnt,在文件中添加一行:
-iC:
\unzipped\test
“C:
\unzipped\test”就是例子工程所在的目录(stdafx.h就在这个目录)。
如果你的工程比较庞大,有很多头文件包含目录,就需要将这些目录一一添加到配置文件。
在确保代码输入没有错误之后(有错误页没关系,PC-Lint会检查出错误),就可以开始代码检查了。
例子工程,打开要检查的代码文件,本例是test.cpp,然后选择“Tools”菜单下的“PC_LINT8.0CheckCurrentFile”命令,Output窗口输出对本文件的检查结果,如图4.20所示:
图4.20检查结果
第四步:
注意点
通过以上步骤,我们在vc++6.0编译器的Tools菜单下面添加了关于PC_LINT的一些子菜单,则我们可以执行相关的检查操作。
如果执行
则必须先执行
目的是生成当前vc6过程对应的lnt文件.
友情提示:
范文可能无法思考和涵盖全面,供参考!
最好找专业人士起草或审核后使用,感谢您的下载!