2019年代码走查工具PCLint.ppt

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
这个选项主要是用来屏蔽告警号为#的告警 如:-e818 表示不显示告警号为818的告警
-esym(#, 符号名)选项
这个选项主要是用来屏蔽告警号为#的某个符号的告警, 如-esym(39, std)
-emacro(#,宏名称)选项
这个选项主要是用来屏蔽告警号为#的某个宏的告警
PC-Lint常用选项
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常用选项
-fallthrough
这个选项主要是用在switch case中没有使用break的情况 可以在代码中使用//lint –fallthrough来消除没有使用break 的告警
-save
保存错误抑制状态 如:在代码中使用 //lint –save –e429则表示从这行开始 之后的代码抑制429告警的出现,直到使用//lint –restore 来进行恢复后才会重新出现429告警
PC-Lint在各种环境中的集成
PC-Lint在各种环境中的集成方法原理都是一 样的,只要掌握前面讲的基本用法,知道如 何用命令行来检测单个文件,一个目录下的 所有文件,许多目录下的所有文件等,然后 再结合各种环境的具体设置,就可以很方便 地将PC-Lint集成到各种应用环境中了。
下面将以VC6, SourceInsight, UltraEdit, Tornado四种环境为例讲述如何集成PC-Lint
代码走查工具—PCLint
目录
PC-Lint简介 PC-Lint基本使用方法 PC-Lint常用选项 PC-Lint在各种环境中的集成 PC-Lint常见告警分析及解决措施
PC-Lint简介
PC-Lint是Gimpel Software公司开发的一个一个C/C++静态 语法检查工具,它不是一个Free 软件。一般来说,软件在 编译连接通过后就可以使用PC-Lint做静态检查。
PC-Lint基本使用方法
检查一个目录下的所有源文件可以使用以下 方法:
如:lint-nt.exe -u -id:\lint std.lnt d:\osp\vos\*.cpp 跟前面不同的是这里将sample.c变成了
d:\osp\vos\*.cpp,使用*.cpp的意思是它会检查 d:\osp\vos目录下的所有.cpp文件,但是它不能 检查子目录下的文件
-dname[=value]
这个选项主要是用来定义一个宏的 如:-dWIN32, -dalpha=0
-sp#
表示指针的尺寸大小是#字节 如:-sp4表示指针是4个字节大小
-si#
表示int的尺寸大小是字节 如:-si4表示int型是4个字节大小
-t#
设置Tab键的大小为#个空格,缺省是8
一般情况下,我们都将自己要写的选项放 在Options.lnt文件中
PC-Lint基本使用方法
另外还有关于编辑环境的问题,如果把PC-Lint集成 到某个编辑环境中,那么他输入的格式必须和对应 环境吻合才能保证在鼠标点击(或双击)错误消息条 目时可以自动定位到对应源代码行,一般来说这类 配置都放置在env-xxx.lnt文件中,如VC6的时envvc6.lnt, SourceInsight的是env-si.lnt
PC-Lint基本使用方法
PC-Lint8.0主要由以下一些文件组成:
Lint-nt.exe Windows下的执行文件 Msg.txt 全部选项帮助说明文件 PC-Lint.pdf PC-Lint的帮助文件 Config.exe 配置程序 Std.lnt 标准配置文件 Options.lnt选项配置文件 .\Lnt子目录下的各种开发编译环境的配置文件 其他一些文件
co-msc60.lnt
//PC-Lint提供的对VC6的告警屏蔽文件
lib-w32.lnt
//PC-Lint提供的对VC6库头文件的告警屏蔽文件
options.lnt -si4 -sp4 //用户自定义的选项文件
env-vc6.lnt
//用户用来设置编辑环境的配置文件
-id:\vc6\vc98\include //include 目录 -id:\vc6\vc98\mfc\include //include 目录
当检查所有文件时不需要使用-u选项
PC-Lint基本使用方法
PC-Lint配置文件介绍
PC-Lint使用那个配置文件是由命令行参数决定的,一般地 都使用std.lnt文件,std.lnt文件中可以包含各种配置选项, 还可以包含其他的配置文件,有点类似C的头文件,里面可 以include许多其他头文件,不过PC-Lint配置文件包含其他 配置文件不需要写include,直接写文件名就可以了。
PC-Lint本身提供了对各种编译器及对应库头文件的 告警屏蔽文件,如co-msc60.lnt是对vc6的,libw32.lnt是对Win32库头文件告警的屏蔽配置文件
PC-Lint常用选项
-i选项
这个选项主要是用来设置include路径的 如:-iD:\VC6\VC98\Include
-e#选项
PC-Lint在各种环境中的集成
3)在Run栏中输入“d:\lint\lint-nt -u -ic:\lint std.lnt env-si %f”其中d:\lint是 你PC-LINT的安装目录, %f是表示当前打开的文件。如果要Lint多个文件则需 要使用配置文件,在配置文件里包含多个文件,将%f改成你自己的配置文件 即可。 4)在Output栏中选择“Iconic Window”、“Capture Output”。 5)在Control栏中选择“Save Files First”、将缺省打了勾选上的“Pause When Done”改成不选择。 6)在Source Links in Output栏中选择“Parse Links in Output”、“File, then Line”。 7)在Pattern栏中将缺省设置改成^\([^ ]*\) \([0-9]+\)就大功告成了。 8)如果需要Lint当前打开文件的同一目录下所有文件,可以将%f改成 %d\*.cpp 如下图:
录 再在Arguments:一栏里填上
-u -iC:\Lint std.lnt $(FileName) 这里$(FileName)表示VC窗口里当前打开的文件名 你也可以将它改成$(FileDir)\*.cpp表示检查当前打开文件同一目录下 的所有.cpp文件,通常用于检查一个模块 还可以改成AllSource.lnt, 象前面讲过的一样,AllSource.lnt是一个放 置有所有文件的配置文件,这时要将-u去掉。
PC-Lint是一个命令行工具,在8.0版本里提供了300多个选 项,1000多个告警。
本篇培训材料旨在引导读者入门,学会PC-LINT的基本使用 方法,一些常见选项的使用,常见告警的分析及规避措施, 希望可以起抛砖引玉的作用,为读者深入掌握PC-Lint的使 用打下基础。
本篇材料主要是以PC-Lint8.0在Windows上的使用为基础来 做的。
PC-Lint在各种环境中的集成
wk.baidu.com
PC-Lint在各种环境中的集成
再在Initial Directory一栏里填上$(FileDir) 最后再将use output window打上勾就完成了将
PC-Lint集成到VC环境中
PC-Lint在各种环境中的集成
在SourceInsight3.1中的集成
-restore
重新设置错误抑制状态,使用-save选项抑制的告警将重 新恢复,在使用了-save选项后一定要记住使用-restore进 行恢复,否则可能有许多告警就被屏蔽调不出现了。
PC-Lint常用选项
其他一些常用选项还有
-elib 抑制库头文件的告警 -elibsym 抑制库头文件中某个符号的告警 -wlevel 设置告警级别 -efile 用来抑制一个或多个文件里的告警 -efunc 用来抑制一个或多个函数里的告警 +rw 设置保留关键字 等等。 象-efile, -wlevel这些告警不要轻易使用 这些选项的具体用法请看pc-lint.pdf文件
如:-function(malloc, mymalloc1, mymalloc2)表示mymalloc1, mymalloc2和malloc有类似的行为,因为malloc是用来分配内存的, 所以pc-lint在检查mymalloc1和mymalloc2时也会想检查malloc一样 看是否有释放掉
象上一页里已经定义了AddNode为保存内存的函数,如果碰到还有 一个函数AddEvent也是有保存内存的功能,我们除了可以使用sem(AddEvent, custodial(2))外,也可以使用-function(AddNode, AddEvent), 效果是一样的。不过要注意的是AddEvent保存内存的参 数也要和AddNode一样是第2个。
PC-Lint基本使用方法
一般来说,PC-Lint经常会有一些误报,为 了消除这些误报,不得不将程序风格改动 来规避,但有时候怎么改写程序都有告警, 比如说你定义了两个宏,前面那个宏里有 一半大括号{, 后面那个宏里有另一半大括 号}, 这时候一定会有告警,你不得不使用一 些PC-Lint选项来屏蔽这些告警。
-sem选项还有些其他用法,大家可以看PC-Lint自带的pclint.pdf文件,里面有详细的解析
PC-Lint常用选项
-function(function0, function1, …)选项
这个选项一般情况下主要是用来表示function1及后面省略掉的函数 和function0有类似的行为。
PC-Lint在各种环境中的集成
在vc环境中集成
在VC的Tools 菜单中, 按 Customize… 会出现下一页出现的对话框 先在上面的列表框里增加一个条目,里面填上PC-Lint80, 文本内
容可以是其他的,由你自己决定。 然后在Command:这一栏中输入PC-Lint的执行文件名,要带上目
每个配置文件里都可以包含配置选项,这些配置选项也可以 放在命令行中,一般为使用方便,命令行中不要放很多选项, 尽量都将选项放到配置文件中
PC-Lint基本使用方法
以下是VC下的配置文件样例
// Microtec 32-bit, -si4 -sp4, lib-w32.lnt // Standard lint options
PC-Lint常用选项
-format选项
这个选项主要是用来设置输出告警消息格式的, 以便于可以和编辑环境格式一样,便于自动定位 到告警对应的源代码
如对SourceInsight, -format选项的使用如下:"format=%f %l %t %n: %m“
这里%f表示文件名 %l表示代码行号 %t表示告警类型,如warning, error等 %n表示PC-Lint的告警号 %m表示PC-Lint输出的告警文本信息
PC-Lint基本使用方法
要检查所有包括子目录的文件可以使用以下方法: lint-nt -id:\lint std.lnt AllSource.lnt 在AllSource.lnt文件中可以放置如下: Moudule1-Dir\*.cpp Moudule2-Dir\*.cpp Moudule3-Dir\*.cpp ...
在SourceInsight3.1中集成PC-Lint过程如下: 1)从Options菜单中选择“Custom Commands”命令项。 2)点Add键会出现下面的Add New Custom Command对话框
在New command name:栏中输入“PC-lint80 ”,原则上这个名称 可以随便起,只要你能搞清楚它的含义就可以了,然后按OK按钮。
PC-Lint常用选项
-sem选项
这个选项主要是用来消除一些语义上的告警 比如说在一个函数A里面分配了内存,这时调用了另一个 函数AddNode将分配的内存保存起来了,因此在函数A里 面没有释放内存,如果使用PC-Lint检查会有内存泄漏方 面的告警,因为PC-Lint不知道函数AddNode将分配的内 存保存起来了,要消除这个告警就要用到-sem选项了。 假设AddNode的第2个参数是用来保存分配内存,用法如 下 -sem(AddNode, custodial(2)) 这里custodial关键字是表示保存的意思,2是表示第2个 参数。
相关文档
最新文档