PC-Lint使用全过程

概述
  PC-Lint是一个历史悠久,功能异常强劲的静态代码检测工具。它的使用历史可以追溯到计算机编程的远古时代(30多年以前)。经过这么多年的发展,它不但能够监测出许多语法逻辑上的隐患,而且也能够有效地帮你提出许多程序在空间利用、运行效率上的改进点,在很多专业级的软件公司,比如Microsoft, PC-Lint检查无错误无警告是代码首先要过的第一关,我个人觉得,对于小公司和个人开发而言,PC-Lint也非常重要,因为基于开发成本考虑,小公司和个人往往不能拿出很多很全面的测试,这时候,PC-Lint的强劲功能可以很好地提高软件的质量。

功能

  1) PC-Lint是一种静态代码检测工具,可以说,PC-LINT是一种更加严格的编译器,不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

  2) PC-lint不但可以检测单个文件,也可以从整个项目的角度来检测问题,因为C语言编译器固有的单个编译,这些问题在编译器环境下很难被检测,而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++等等,也支持16/32/64的平台环境。

  4) 支持Scott Meyes的名著(Effective C++/More Effective C++)中说描述的各种提高效率和防止错误的方法。

四步速成PC-Lint概述
  这么好的工具,当然是先拿起来用了再说,这里分为四步,保证你马上可以使用PC-Lint了,当然,如果你上手以后,想细致深入学习这个工具,可以在网上查找相应的资料,另外在我的另一个系列文章《软件开发的七种武器》中有一篇是讲述 PC-Lint使用的,比这篇要深入细致一些,如有兴趣,也可以看看。

  第一步:安装&设置

  安装和通常的软件没有什么不同。

  安装结束后在PC-Lint安装目录下运行CONFIG.exe,各项设置简要解释如下:

  a) 第一步,给出PC-Lint的安装路径和选择设置的保存文件。

  b) 第二步,选择你所使用的C/C++编译器:比如Visual C++ 6.x。

  c) 第三步,选择内存模式:比如32 bit Flat Model。

  d) 第四步,选择所使用的库:比如MFC,OWL,等,可多选,在windows下开发的一般要选中windows 32 bit。

  e) 第五步,C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开:比如Scott Meyers,可不选。

  f) 第六步,头文件的设置:可在后面步骤中手工添加。

  第二步:整合PC-Lint到选定的编译环境

  当你在上述第二步中选择了编译器后,可以在PC-Lint目录下找到一个"env-选用的编辑环境.lnt"文件,比如对于Source insight 是env-si.lnt,对于vc6是env-vc6.lnt。

  打开此文件,根据上面的描述,配置你的编译器,下面以VC6为例:

  ·选取菜单 tools | customize.....

  ·选取 Tools 标签

  ·点按主对话框上方的虚线小方框 New

  ·输入 name: PC-LINT

  ·输入 Command: c:/lint/lint-nt.exe,假设安装到此路径

  ·输入 Arguments: c:/lint/std.lnt ?(FilePath)?7)选择 (x) Use Output Window

  ·Close

  ·完成后,在tools菜单下就会有一项PC-LINT选项。

    第三步:Lint单个C文件

  a) 打开一个C文件

  b) 运行第2)步集成上的PC-Lint菜单项

  c) LINT结果会在一两秒之内出来。告警的解释可参考LINT安装目录下MSG.TXT文件,打开文件,通过查找告警号码定位,就可以看到比较详细的说明。

  第四步:Lint多个C文件

  a) 在LINT软件目录下建立PRJLINT.LNT文件,文件的第一行是使用的LINT配置文件名,从第二行开始,列出想所有要LINT的*.C文件名,一行一个。如果要把结果输出到文件,在前面加上一行"-os(文件名)"(例如:"-os(c:/lint/result.txt)")。样例:YF_Config.lnt

// 以下为自己想要进行Lint的.C文件,
G:/src/tt/tt1.c
G:/src/tt/tt2.c


  b) 用2)介绍的方法在Source Insight"中介绍的方法增加一条"PC-LINT PROJECT"命令,所有设置与"PC-LINT"设置相同,除了

  ①"Custom Commands"对话框中"RUN"编辑框的文字由"C:/LINT/LINT-NT.EXE filename.lnt %f"改为"C:/LINT/LINT-NT.EXE PRJLINT.LINT",也就是把配置文件名改为PRJLINT.LNT,并去掉未尾的"%f"

  ②设置的快捷键与PC-LINT要区别开来

  利用下面的DOS命令可以用来得到一堆*.C文件的清单。例如:

  ① 列出C:/SRC下所有*.C文件,并保存到C:/SRC/FILELIST.TXT:

DIR C:/SRC/*.C /B >C:/SRC/FILELIST.TXT

  ② 列出C:/SRC下,包括SRC的子目录下的所有的*.C文件,,并添加到C:/SRC/FILELIST.TXT的未尾:

DIR C:/SRC/*.C /S/B >>C:/SRC/FILELIST.TXT

  PC-Lint 重要文件说明

  Msg.txt :解释告警的内容。

  选用的.lnt :包含头文件的路径,-i选项。

  env-选用的编辑环境.lnt :讲述如何将PC-lint与对应的编辑环境结合起来。

  co-xxx.lnt :选定的编译器。

  STD.LNT :内存模型等全局性东西。

  LIB-xxx.LNT :库类型的列表,包括标准C/C++库,MFC库,OWL库等等。

  AU-xxx.LNT :C++编程提出过重要建议的作者,选择某作者后,他提出的编程建议方面的选项将被打开。

  OPTIONS.LNT :反映全局编译信息显示情况的选项文件。

 VC中多文件工程的PCLint使用详解

1.安装
 我使用的是PC.Lint.v8.00e,是不用安装的版本。
 解开到E:/PC.Lint.v8.00e目录,可执行文件为Lint.exe(lint-nt.exe与其相同,可能为NT平台用的,在Win2000下都可运行)。
 子目录lnt内是检查的规则及选项文件,这两种文件扩展名全为.lnt。

2.准备自己工程的选项文件
 在E:/PC.Lint.v8.00e/lnt下新建MyProj.lnt文本文件,我们将自己工程的很多头文件目录,在其中一一列出来,内容如下:
 
 std.lnt/*注释:包含的规则和/或选项文件*/
 env-vc6.lnt
 /*下面为各头文件目录,可以在字串中不要双引号,可以有多行*/
 -i"C:/MyProj/IncludeA" -i"C:/MyProj/IncludeB" -iC:/MyProj/IncludeC
 -iC:/MyProj/IncludeD
 -e641//另一种注释//这是省略#641错误
 【注意】指明各头文件目录很重要。头文件各目录的名称可能在VC的Project/Project Settings/Project Options栏中:
  /I "../Include/PS",可供借鉴(相对路径暂未测试)。
  当后面运行Lint时出现无法打开某个头文件时,需要不断添加头文件所在目录的名称到本选项文件中。

3.在VC中运行PCLint(针对单个文件但需包含多个头文件目录):
    A 点击Tools/Customize/Tools出现定制窗口
    B 在Menu contents中双击下面的空白拦,输入拟新增的Tool名称:PCLint
    C 双击PClint项,在Command中填入要调用的.exe文件名:lint
      Arguments:中填入:-i"E:/PC.Lint.v8.00e/lnt" MyProj.lnt $(FilePath)
      【注意】$(FilePath)这个字串是个宏名,也可以通过点击右边的三角箭头选择;可能为要检查的本文件的路径加文件名,而
      不能是$(FileName)!!!因为它可能只是文件名而不带路径,将导致使用时说无法发现!
      另外,MyProj.lnt这个选项文件必须在$(FilePath)之前。
      Initial Directory项:在Arguments项中若缺少-i"E:/PC.Lint.v8.00e/lnt"时将报无法找到各个.lnt文件,可在此
      栏填E:/PC.Lint.v8.00e/lnt来指定。
      选中"Use Output Window" (这将使PCLint运行的结果在VC下方Output窗口中,双击行号还可以跳到指定行)
    D 打开一个项目,让焦点位于某个源程序编辑窗口,点击Tools/pclint菜单即可

【注意】直到VC Output窗口中出现Tool returned code: ,才算Tool运行完,若未运行完,可能在再点击PCLint时报错。

4.网上搜到的VC环境多个文件同时Lint的方法,大致为找到各个.c文件,将各文件名经xargs传给lint来实现。但需要find,xargs等
命令,似乎需要模拟unix环境的软件支持中才有,我装的Cygwin的环境中对find命令后的格式有问题,无法支持unix中的
find . -name *.c,故无法由此找到各个.c文件名。但可以用Cygwin的ls命令来代替find。
 【原方法如下:】
   A 点击Tools/Customize/Tools出现定制窗口
  B 在Menu contents中双击空白拦,输入:PCLint-project
  C 双击PCLint-project项,在Command:中填入:find
      Arguments:中填入:$(FileDir) -name *.c | xargs pclint -i"c:/unix/usr" -u std.lnt env-vc6.lnt
      选中"Use Output Window"
  D 打开一个项目,让焦点位于最项层目前的一个Source Window中,点击Tools/PCLint-project菜单即可

 【方法1如下:】
  A 点击Tools/Customize/Tools出现定制窗口
  B 在Menu contents中双击空白拦,输入:PCLint-Proj
  C 双击PCLint-Proj项,在Command:中填入:ls
      Arguments:中填入:*.c |xargs lint -i"E:/PC.Lint.v8.00e/lnt" MyProj.lnt
      Initial Directory项:本栏填写工程的一个源文件子目录(保证在Arguments项中有-i"E:/PC.Lint.v8.00e/lnt")
      选中"Use Output Window"
  D 打开一个项目,让焦点位于最顶层目前的一个Source Window中,点击Tools/PCLint-Proj菜单即可

 【最简单的方法如下:】
  A 在MyProj.lnt末尾添加一行 *.c (即目标为本目录下所有.c文件)
  B 点击Tools/Customize/Tools出现定制窗口
  C 在Menu contents中双击空白拦,输入:PCLint-Proj
  D 双击PCLint-Proj项,在Command:中填入:lint
      Arguments:中填入:-i"E:/PC.Lint.v8.00e/lnt" MyProj.lnt
      Initial Directory项:本栏填写工程的一个源文件子目录(保证在Arguments项中有-i"E:/PC.Lint.v8.00e/lnt")
      选中"Use Output Window"
  E 打开一个项目,让焦点位于最项层目前的一个Source Window中,点击Tools/PCLint-Proj菜单即可

【注意】上述方法中的ls,xargs等命令位于Cygwin的目录中,需要将路径添加到系统的PATH中:
  "我的电脑"(右击鼠标)->"属性"->"高级"->"环境变量"->"系统变量"->"Path"
    加入"C:/cygwin/bin"重启生效。
 ls *.c将同时找到.c文件和.cpp文件,但是也会将非工程所需的.c文件编译进来,需要手工把文件转走。
 另外,这种方法一次只能Lint一个目录,每完成一个目录就要重新设置Initial Directory项为新的要检查的目录。

5.在DOS窗口中对一个目录多个文件进行Lint
1)基于Cygwin
cd C:/MyProj/SrcA/
ls *.c | xargs lint -i"E:/PC.Lint.v8.00e/lnt" MyProj.lnt >> LintOutput.txt
【注意】ls *.c 也可以用DOS命令dir *.c/B来替换,/B的意思是仅列出各文件名。>>LintOutput.txt的意思是将Lint结果输出到
LintOutput.txt文件中。
2)无Cygwin支持
cd C:/MyProj/SrcA/
dir *.c /B
将所有列出的.c文件名称复制到E:/PC.Lint.v8.00e/lnt/MyProj.lnt中,内容如下:
 std.lnt/*注释:包含的规则和/或选项文件*/
 env-vc6.lnt
 /*下面为各头文件目录,可以在字串中不要双引号,可以有多行*/
 -i"C:/MyProj/IncludeA" -i"C:/MyProj/IncludeB" -iC:/MyProj/IncludeC
 -iC:/MyProj/IncludeD
 -e641//另一种注释//这是省略#641错误
 a.c //指定要Lint的文件
 b.c
 c.c
 最后几行指定的要Lint之文件也可以用通配符,如:
 *.c
然后直接运行 lint -i"E:/PC.Lint.v8.00e/lnt" MyProj.lnt >> LintOutput.txt

你可能感兴趣的:(PC-Lint使用全过程)