【VC++开源代码栏目提醒】:网学会员为广大网友收集整理了,代码走查工具—PCLint - 文化,希望对大家有所帮助!
代码走查工具—PCLint 目 录 PC-Lint简介 PC-Lint基本使用方法 PC-Lint常用选项 PC-Lint在各种环境中的集成 PC-Lint常见告警分析及解决措施 PC-Lint简介 PC-Lint是Gimpel Software公司开发的一个一个C/C静态 语法检查工具,它不是一个Free 软件。
一般来说,软件在 编译连接通过后就可以使用PC-Lint做静态检查。
PC-Lint是一个命令行工具,在8.0版本里提供了300多个选 项,1000多个告警。
本篇培训材料旨在引导读者入门,学会PC-LINT的基本使用 方法,一些常见选项的使用,常见告警的分析及规避措施, 希望可以起抛砖引玉的作用,为读者深入掌握PC-Lint的使 用打下基础。
本篇材料主要是以PC-Lint8.0在Windows上的使用为基础来 做的。
PC-Lint基本使用方法 PC-Lint8.0主要由以下一些文件组成: Lint-nt.exe Windows下的执行文件 Msg.txt 全部选项帮助说明文件 PC-Lint.pdf PC-Lint的帮助文件 Config.exe 配置程序 Std.lnt 标准配置文件 Options.lnt选项配置文件 .Lnt子目录下的各种开发编译环境的配置文件 其他一些文件 PC-Lint基本使用方法 PC-Lint是一个命令行工具,因此使用方式是命令行 带参数方式使用。
一般的使用格式为: lint-nt.exe Option file1 file2 … 如:lint-nt.exe -u -id:lint std.lnt sample.c 在这里-u 表示只对本单元进行检查 -id:lint 是表示会在d:lint目录下搜索文件 std.lnt 是表示要使用的配置文件 sample.c 表示要检查的源文件 PC-Lint基本使用方法 检查一个目录下的所有源文件可以使用以下 方法: 如:lint-nt.exe -u -id:lint std.lnt d:ospvos.cpp 跟前面不同的是这里将sample.c变成了 d:ospvos.cpp,使用.cpp的意思是它会检查 d:ospvos目录下的所有.cpp文件,但是它不能 检查子目录下的文件 PC-Lint基本使用方法 要检查所有包括子目录的文件可以使用以下方法: lint-nt -id:lint std.lnt AllSource.lnt 在AllSource.lnt文件中可以放置如下: Moudule1-Dir.cpp Moudule2-Dir.cpp Moudule3-Dir.cpp ...当检查所有文件时不需要使用-u选项 PC-Lint基本使用方法 PC-Lint配置文件介绍 PC-Lint使用那个配置文件是由命令行参数决定的,一般地 都使用std.lnt文件,std.lnt文件中可以包含各种配置选项, 还可以包含其他的配置文件,有点类似C的头文件,里面可 以include许多其他头文件,不过PC-Lint配置文件包含其他 配置文件不需要写include直接写文件名就可以了。
每个配置文件里都可以包含配置选项,这些配置选项也可以 放在命令行中,一般为使用方便,命令行中不要放很多选项, 尽量都将选项放到配置文件中 PC-Lint基本使用方法 以下是
VC下的配置文件样例 // Microtec 32-bit -si4 -sp4 lib-w32.lnt // Standard lint options co-msc60.lnt //PC-Lint提供的对
VC6的告警屏蔽文件 lib-w32.lnt //PC-Lint提供的对
VC6库头文件的告警屏蔽文件 options.lnt -si4 -sp4 //用户自定义的选项文件 env-
vc6.lnt //用户用来设置编辑环境的配置文件 -id:
vc6
vc98include //include 目录 -id:
vc6
vc98mfcinclude //include 目录 PC-Lint基本使用方法 一般来说,PC-Lint经常会有一些误报,为 了消除这些误报,不得不将程序风格改动 来规避,但有时候怎么改写程序都有告警, 比如说你定义了两个宏,前面那个宏里有 一半大括号 后面那个宏里有另一半大括 号 这时候一定会有告警,你不得不使用一 些PC-Lint选项来屏蔽这些告警。
一般情况下,我们都将自己要写的选项放 在Options.lnt文件中 PC-Lint基本使用方法 另外还有关于编辑环境的问题,如果把PC-Lint集成 到某个编辑环境中,那么他输入的格式必须和对应 环境吻合才能保证在鼠标点击或双击错误消息条 目时可以自动定位到对应源
代码行,一般来说这类 配置都放置在env-xxx.lnt文件中,如
VC6的时env-
vc6.lnt SourceInsight的是env-si.lnt PC-Lint本身提供了对各种编译器及对应库头文件的 告警屏蔽文件,如co-msc60.lnt是对
vc6的,lib- w32.lnt是对Win32库头文件告警的屏蔽配置文件 PC-Lint常用选项 -i选项 这个选项主要是用来设置include路径的 如:-iD:
VC6
VC98Include -e选项 这个选项主要是用来屏蔽告警号为的告警 如:-e818 表示不显示告警号为818的告警 -esym 符号名选项 这个选项主要是用来屏蔽告警号为的某个符号的告警, 如-esym39 std -emacro宏名称选项 这个选项主要是用来屏蔽告警号为的某个宏的告警 PC-Lint常用选项 -dnamevalue 这个选项主要是用来定义一个宏的 如:-dWIN32 -dalpha0 -sp 表示指针的尺寸大小是字节 如:-sp4表示指针是4个字节大小 -si 表示int的尺寸大小是字节 如:-si4表示int型是4个字节大小 -t 设置Tab键的大小为个空格,缺省是8 PC-Lint常用选项 -sem选项 这个选项主要是用来消除一些语义上的告警 比如说在一个函数A里面分配了内存,这时调用了另一个 函数AddNode将分配的内存保存起来了,因此在函数A里 面没有释放内存,如果使用PC-Lint检查会有内存泄漏方 面的告警,因为PC-Lint不知道函数AddNode将分配的内 存保存起来了,要消除这个告警就要用到-sem选项了。
假设AddNode的第2个参数是用来保存分配内存,用法如 下 -semAddNode custodial2 这里custodial关键字是表示保存的意思,2是表示第2个 参数。
-sem选项还有些其他用法,大家可以看PC-Lint自带的pc- lint.pdf文件,里面有详细的解析 PC-Lint常用选项 -functionfunction0 function1 …选项 这个选项一般情况下主要是用来表示function1及后面省略掉的函数 和function0有类似的行为。
如:-functionmalloc mymalloc1 mymalloc2表示mymalloc1 mymalloc2和malloc有类似的行为,因为malloc是用来分配内存的, 所以pc-lint在检查mymalloc1和mymalloc2时也会想检查malloc一样 看是否有释放掉 象上一页里已经定义了AddNode为保存内存的函数,如果碰到还有 一个函数AddEvent也是有保存内存的功能,我们除了可以使用- semAddEvent custodial2外,也可以使用-functionAddNode AddEvent 效果是一样的。
不过要注意的是AddEvent保存内存的参 数也要和AddNode一样是第2个。
PC-Lint常用选项 -format选项 这个选项主要是用来设置输出告警消息格式的, 以便于可以和编辑环境格式一样,便于自动定位 到告警对应的源
代码 如对SourceInsight -format选项的使用如下:- formatf l t n: m“ 这里f表示文件名 l表示
代码行号 t表示告警类型,如warning error等 n表示PC-Lint的告警号 m表示PC-Lint输出的告警文本信息 PC-Lint常用选项 -fallthrough 这个选项主要是用在switch case中没有使用break的情况 可以在
代码中使用//lint –fallthrough来消除没有使用break 的告警 -save 保存错误抑制状态 如:在
代码中使用 //lint –save –e429则表示从这行开始 之后的
代码抑制429告警的出现,直到使用//lint –restore 来进行恢复后才会重新出现429告警 -restore 重新设置错误抑制状态,使用-save选项抑制的告警将重 新恢复,在使用了-save选项后一定要记住使用-restore进 行恢复,否则可能有许多告警就被屏蔽调不出现了。
PC-Lint常用选项 其他一些常用选项还有 -elib 抑制库头文件的告警 -elibsym 抑制库头文件中某个符号的告警 -wlevel 设置告警级别 -efile 用来抑制一个或多个文件里的告警 -efunc 用来抑制一个或多个函数里的告警 rw 设置保留关键字 等等。
象-efile -wlevel这些告警不要轻易使用 这些选项的具体用法请看pc-lint.pdf文件 PC-Lint在各种环境中的集成 PC-Lint在各种环境中的集成方法原理都是一 样的,只要掌握前面讲的基本用法,知道如 何用命令行来检测单个文件,一个目录下的 所有文件,许多目录下的所有文件等,然后 再结合各种环境的具体设置,就可以很方便 地将PC-Lint集成到各种应用环境中了。
下面将以
VC6 SourceInsight UltraEdit Tornado四种环境为例讲述如何集成PC-Lint PC-Lint在各种环境中的集成 在
vc环境中集成 在
VC的Tools 菜单中 按 Customize… 会出现下一页出现的对话框 先在上面的列表框里增加一个条目,里面填上PC-Lint80 文本内 容可以是其他的,由你自己决定。
然后在Command:这一栏中输入PC-Lint的执行文件名,要带上目 录 再在Arguments:一栏里填上 -u -iC:Lint std.lnt FileName 这里FileName表示
VC窗口里当前打开的文件名 你也可以将它改成FileDir.cpp表示检查当前打开文件同一目录下 的所有.cpp文件,通常用于检查一个模块 还可以改成AllSource.lnt 象前面讲过的一样,AllSource.lnt是一个放 置有所有文件的配置文件,这时要将-u去掉。