代码走查工具—PCLint

合集下载

PClint安装及使用总结

PClint安装及使用总结

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 规则自定义-概述说明以及解释

pclint 规则自定义-概述说明以及解释

pclint 规则自定义-概述说明以及解释1.引言1.1 概述PCLint是一款流行的静态代码分析工具,用于帮助开发人员提高代码质量和发现潜在的bug。

其强大的规则检测能力使得开发人员能够在编译阶段就发现一些潜在的程序错误,从而帮助节省修复成本和提高代码的健壮性。

本文将重点介绍PCLint规则的自定义功能,通过自定义规则,开发人员可以根据项目的具体需求和编码规范来定制一些特定的规则,从而更好地适应项目的实际情况,提高代码质量和开发效率。

在接下来的章节中,我们将介绍PCLint的基本概念和规则自定义的方法,以及一些实例来帮助读者更好地理解和应用PCLint规则自定义功能。

通过本文的学习,读者将能够更好地利用PCLint工具来改善代码质量,并提高软件开发的效率和质量。

1.2文章结构文章结构部分的内容:文章结构是指文章的整体框架和组织方式。

一个清晰的文章结构可以帮助读者更好地理解文章的内容。

在本文中,我们将按照以下结构来展开讨论:1. 引言部分将介绍本文的背景和意义,概述PCLint规则自定义的重要性以及本文的目的和结构。

2. 正文部分将详细介绍PCLint的简介,包括其功能和特点。

然后将介绍PCLint规则定制的方法,以及如何自定义PCLint规则来满足特定的需求。

3. 结论部分将总结本文的主要内容和观点,提出应用建议,以及展望未来可能的发展方向。

通过以上结构的安排,我们将全面而系统地介绍PCLint规则自定义的相关知识,帮助读者更好地理解和应用这一技术。

1.3 目的在本文中,我们的主要目的是介绍如何通过自定义规则来定制PCLint 的规则,以满足不同项目的代码检查需求。

通过了解PCLint 的规则定制方法和实例,读者可以更好地理解如何根据项目特点和要求,制定符合实际情况的代码规范,提高代码质量和可维护性。

同时,我们也希望通过本文的分享,促进开发团队对代码规范的重视,提高团队的整体开发效率和项目质量。

代码走查工具—PCLint

代码走查工具—PCLint
-sem选项还有些其他用法,大家可以看PC-Lint自带的pclint.pdf文件,里面有详细的解析
14
PC-Lint常用选项
-function(function0, function1, …)选项
这个选项一般情况下主要是用来表示function1及后面省略掉的函数 和function0有类似的行为。
如:-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个。
17
PC-Lint常用选项
其他一些常用选项还有
-elib 抑制库头文件的告警 -elibsym 抑制库头文件中某个符号的告警 -wlevel 设置告警级别 -efile 用来抑制一个或多个文件里的告警 -efunc 用来抑制一个或多个函数里的告警 +rw 设置保留关键字 等等。 象-efile, -wlevel这些告警不要轻易使用 这些选项的具体用法请看pc-lint.pdf文件
15
PC-Lint常用选项
-format选项
这个选项主要是用来设置输出告警消息格式的, 以便于可以和编辑环境格式一样,便于自动定位 到告警对应的源代码

PC-Lint

PC-Lint

概述功能1)PC-Lint 是一種靜態代碼檢測工具,可以說,PC-LINT 是一種更加嚴格的編譯器,不僅可以象普通編譯器那樣檢查出一般的語法錯誤,還可以檢查出那些雖然完全合乎語法要求,但很可能是潛在的、不易發現的錯誤。

2)PC-lint 不但可以檢測單個文件,也可以從整個項目的角度來檢測問題,因爲 C 語言編譯器固有的單個編譯,這些問題在編譯器環境下很難被檢測,而 PC-Lint 在檢查當前文件的同時還會檢查所有與之相關的文件,可想而知,它會對我們有很大的幫助。

3)PC-lint 支持幾乎所有流行的編輯環境和編譯器,比如 B orland C++從1.x 到5.x 各個版本、Borland C++ Build 、GCC 、VC , 、watcom C/C++、Source insight 、intel C/C++等等,也支持 16/32/64 的平台環境。

4)支持 S cott Meyes 的名著(Effective C++/More Effective C++)中說描述的各種提高效率和防止錯誤的方法。

第一步:安裝&設置安裝和通常的軟件沒有什麽不同。

安裝結束後在 P C-Lint 安裝目錄下運行 C ONFIG.exe ,各項設置簡要解釋如a)第一步,給出 P C-Lint 的安裝路徑和選擇設置的保存文件。

b)第二步,選擇你所使用的 C /C++編譯器:比如 V isual C++ 6.x 。

c)第三步,選擇內存模式:比如 32 bit Flat Model 。

d)第四步,選擇所使用的庫:比如 M FC ,OWL ,等,可多選,在 w indows 下開發的一般要選中 w indows 32 b it 。

e)第五步,C++編程提出過重要建議的作者,選擇某作者後,他提出的編程建議方面的選項將被打開:比如Scott Meyers ,可不選。

f)第六步,頭文件的設置:可在後面步驟中手工添加。

第二步:整合 P C-Lint 到選定的編譯環境當你在上述第二步中選擇了編譯器後,可以在 PC-Lint 目錄下找到一個"env-選用的編輯環境.lnt"文件,比如對于 Source insight 是 env-si.lnt,對于vc6 是env-vc6.lnt 。

PC-Lint工具使用说明书

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使用说明(newest)

PC LINT使用说明(newest)

PC LINT使用说明(newest)pc-lint使用说明(newest)pc-lint使用说明1.详述............................................................................ .........22.如何加装pc-lint..................................................................33.lint 一个c文件.. (3)3.1用命令行方式进行lint.......................................................................... . (4)3.2在sourceinsight中内置............................................................................ .. (4)3.3lint选项............................................................................ (6)4.lint一个工程下的多个c文件 (7)4.1为何要lint多个c文件............................................................................ ....................................74.2如何lint一个工程下的多个c文件............................................................................ ..................84.3简单的lint多个文件............................................................................ (9)5.通过准则 (10)第一类:不能出现的警告信息............................................................................ ............................10第二类:需要确认的警告............................................................................ .. (10)6.pc-lint的布局 (11)附一options.lnt (12)附二std.lnt........................................................................14附三env-si.lnt (14)lint工具就是一种软件质量确保工具,许多国外的大型专业软件公司,例如微软公司,都把它做为程序检查工具,在程序合入正先行版本或交货测试之前一定必须确保通过了lint检查,他们建议软件工程师在采用lint时必须关上所有的编程控制器,如果一定必须停用某些控制器,那么必须得出停用这些控制器的正当理由。

PC-Lint工具使用说明书

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使用文档

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使用指南

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编译器的标准库模块。

白盒测试工具Pclint

白盒测试工具Pclint
它通过检查源代码中的语法、结构、 逻辑和数据流,来识别潜在的问题和 错误,并提供详细的报告和建议。
PCLint的特点
全面覆盖
PCLint能够全面覆盖C和C语言的语 法和语义,检测各种类型的错误和缺 陷。
高精度
PCLint采用先进的静态分析技术,能 够准确地识别代码中的问题,减少误 报和漏报。
可定制
白盒测试工具PCLint
目 录
• PCLint简介 • PCLint的安装与配置 • PCLint的使用方法 • PCLint的常见问题与解决方案 • PCLint与其他白盒测试工具的比较 • PCLint的发展趋势与未来展望
01
PCLint简介
什么是PCLint
PCLint是一款白盒测试工具,用于对 C和C代码进行静态分析,以发现潜在 的缺陷、漏洞和不符合编码标准的代 码。
03
支持更多编程语言
为了满足更广泛的需求,PCLint将逐 步支持更多的编程语言,包括新兴的 编程语言和跨平台语言。
PCLint与其他技术的结合应用
与测试框架集成
PCLint将与主流的测试框架(如JUnit、TestNG等)紧密集成,实 现测试与代码分析的无缝对接。
与版本控制系统协作
通过与版本控制系统(如Git、SVN等)集成,PCLint将能够跟踪 代码变更,为开发者提供更准确的代码分析报告。
指定输出目录,用于存放PCLint生成的测试报告和覆盖率文件。
report-junit
生成JUnit格式的测试报告,便于集成到CI/CD工具中。
PCLint的测试用例编写
编写测试用例时,需要遵循一定的命名规范,例如使用“test_”作为前缀 ,以便于识别和组织测试用例。
测试用例应针对待测试的源代码中的函数、类或模块进行编写,确保覆盖 所有重要的功能和边界条件。

静态检查工具——PClint

静态检查工具——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简介

PC Lint简介

PCLint操作演示
(略)
PC int 介绍
THE END!
PCLint配置包的内容
对代码进行PCLint检查前,需要配置一个由很多选项组成的参数包,按照 包中规定的要求来对代码进行检查,一个配置包通常包含下列几类内容: • • • • • • • • Rules for Specifying Options:比如/*lint -save -e54 */ /*lint Error Inhibition Options:比如 –e, -efile,-elib,-efunc Size and Alignment Options :比如 –sb# Verbosity Options :比如 -v Flag Options:比如+fpn fpn Message Presentation Options:比如-append( errno, string ) append( Other Options:比如-cpp( ext ) cpp( .lnt文件中 Compiler Adaptation:在co-xxx.lnt文件中 coco
代码检查告警级别: 代码检查告警级别: w0 不产生信息(除了遇到致命的错误) w1 只生成错误信息 -- 没有告警信息和其它 提示信息 w2 只有错误和告警信息 w3 生成错误、告警和其它提示信息(这是 默认设置) W4 生成所有信息
函数库头文件的告警级别: 函数库头文件的告警级别: wlib(0) 不生成任何库信息 wlib(1) 只生成错误信息(当处理库的 源代码时) wlib(2) 生成错误和告警信息 wlib(3) 生成错误、告警和其它信息(这 是默认设置) wlib(4) 产生所有信息
PCLint实现的代码检查功能(2)
PCLint能检查出代码的语法错误和可能引起程序异常执行的逻辑告警。但它更侧重于后者 的检查,因为这类问题更容易被人忽略(前者通过平台编译器去发现)。所以它的代码 检查功能通常表现在下面几方面:

白盒测试工具Pclint

白盒测试工具Pclint
• 其中-i后面的路径名为VC的安装路径和VC Include 文件路径,根据 自己的修改便可。 – options.lnt 内容可为空,为定制内容,以后需要时再添加。 准备工作做完了,下一步就是要将pclint集成到VC6中去,先配置lint使
Pclint 配置小结
– options.lnt 内容可为空,为定制内容,以后需要时再添加。 准备工作做完了,下一步就是要将pclint集成到VC6中去, 先配置lint使之能对单个C或C++文件进行检查
d:\pclint\env-vc6.lnt d:\pclint\options.lnt -si4 -sp4
-i 指明包含路径 -i"c:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin;c:\Program Files\Microsoft Visual Studio\VC98\ATL\Include;c:\Program Files\Microsoft Visual Studio\VC98\Include;c:\Program Files\Microsoft Visual Studio\VC98\MFC\Include“
– IBM’s VM, MVS
– OS-9 – 其他支持c编译器的平台
兼容性
• 支持K&R C, ANSI C, ANSI/ISO C++ • 直接支持Microsoft, GNU和大多数其他主流的编译器和 库 • 支持大多数主流嵌入式系统的编译器
• 拥有很多支持异类编译器的选项
功 能
• • • 数据检查技术可检测变量初始化和数据误用的问题 全局数据流跟踪技术,可跨越函数和函数之间的界限进 行数据处理流程的分析 可对100个左右的库函数进行检查,这些检查还可以扩展 到用户函数上。强化类型检查,并可进行设置检查级别 选项 函数变量和返回值的用户自定义语句检查

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的使用技巧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的基本使用方法,起抛砖引玉的作用,能让读者从这里起步继续去研究如何娴熟地使用PC-LINT的各种选项,能让它充分为我们的开发工作服务。

1.概述如果要给LINT工具下一个形象点的定义,那就是:一种更加严格的编译器。

它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。

我们一般会忽视掉waring,但waring或许会变成下一个error.。

请看下面的例子:1:2:char *report( int m, int n, char *p )3:{4: int result;5: char *temp;6: long nm;7: int i, k, kk;8: char name[11] = "Joe Jakeson";9:10: nm = n * m;11: temp = p == "" ? "null" : p;12: for( i = 0; i 13: {14: k++;15: kk = i;16: }17:18: if( k== 1 ) result = nm;19: else if( kk > 0 ) result = 1;20: else if( kk < 0 ) result = -1;21:22: if( m == result ) return( temp );23: else return( name );24:}上面的代码用一般的编译器编译是一段有效的代码,但是用PC-LINT编译就会有几个告警。

首先第8行向name数组赋值时丢掉了nul字符,第10行的乘法精度会失准,第11行的比较有问题,第14行的变量k没有初始化,第15行的kk可能没有被初始化,第22行的result也有可能没有被初始化,第23行返回的是一个局部对象的地址。

静态代码检查工具PC-Lint(二)

静态代码检查工具PC-Lint(二)

静态代码检查⼯具PC-Lint(⼆)3.5 格式检查PC-Lint会检查printf和scanf(及其家族)中的格式冲突,例如:printf( "%+c", ... )将产⽣566告警,因为加号只在数字转换时有⽤,有超过⼀百个这样的组合会产⽣告警,编译器通常不标记这些⽭盾,其他的告警还有对坏的格式的抱怨,它们是557和567。

我们遵循ANSI C建⽴的规则,可能更重要的是我们还对⼤⼩不正确的格式进⾏标记(包括告警558, 559, 560 和 561)。

⽐如 %d 格式,允许使⽤int和unsigned int,但是不⽀持double和long(如果long⽐int长),同样,scanf需要参数指向的对象⼤⼩正确。

如果只是参数的类型(不是⼤⼩)与格式不⼀致,那将产⽣626和627告警。

-printf 和 -scanf选项允许⽤户指定与printf或scanf 函数族类似的函数,-printf_code 和 -scanf_code也可以被⽤来描述⾮标准的 % 码。

3.6 缩进检查根据代码中的缩进问题,PC-Lint也会产⽣相应的告警,因为缩进的问题有很⼤⼀部分是由于代码结构不良或者⼤括号的遗漏造成的。

⽐如下⾯的例⼦:if( ... )if( ... )statementelse statement很明显这⾥的else是和第⼀个if语句对应的,⽽在这⾥编译器则把它和第⼆个if对应起来。

PC-Lint会对这种情况产⽣告警。

和这样的缩进检查相关的告警主要有三个725(no positive indentation)、525(negatively indented from)、539(Did not expect positive indentation from Location)要进⾏缩进检查,我们⾸先要设置⽂件中的tab键所对应的空格数,默认的是占⽤8个空格,这个参数可以⽤-t#选项进⾏修改。

关于PC-lint,以及如何在MDK中添加PC-lint工具

关于PC-lint,以及如何在MDK中添加PC-lint工具

关于PC-lint,以及如何在MDK中添加PC-lint工具展开全文有人问:代码中类似 /*lint !e750... */代表什么意思?回答这个问题,就要牵涉到本文说的PC-Lint这个工具。

1写在前面可能有一定编程经验的朋友,应该在一些地方都看到过类似 /*lint !e750... */ 这种“注释”。

但,有多少人去分析过它的含义呢?比如:在FreeRTOS的tasks.c源码中有如下一行语句:#undef MPU_WRAPPERS_INCLUDED_FROM_API_FILE /*lint !e961 !e750. */后面 /*lint !e961 !e750. */ 作用就是:在使用PC-Lint工具进行静态分析时,隐藏本行宏定义未被调用的“错误”。

换种方式理解:编译时,这条语句不出现警告信息(注意:这里是比喻为编译,其实是PC-Lint静态分析)。

2关于PC-LintPC-Lint 是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++。

你可以把它看作是一种更加严格的编译器。

它除了可以检查出一般的语法错误外,还可以检查出那些虽然符合语法要求,但很可能是潜在的、不易发现的错误。

C语言的灵活性带来了代码效率的提升,但相应带来了代码编写的随意性,另外C编译器不进行强制类型检查,也带来了代码编写的隐患。

PC-Lint识别并报告C语言中的编程陷阱和格式缺陷的发生。

它进行程序的全局分析,能识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针,冗余的代码等。

软件除错是软件项目开发成本和延误的主要因素,PC-lint能够帮你在程序动态测试之前发现编码错误,这样消除错误的成本更低。

错误号PC-Lint 能够检查出很多语法错误和语法上正确的逻辑错误,PC-Lint 为大部分错误消息都分配了一个错误号:这些错误号在文档中有详细说明:命令格式:更多相关内容可以参考官网:3Keil支持PC-Lint说明在Keil官网有这样一段信息:X PC-lint is a powerful static analysis tool that will check your C/C++ sourcecode and find bugs, glitches,inconsistencies, non-portable constructs,redundant code, and much more. It looksacross multiple modules, and so, enjoys aperspective your compiler does not have.A C compiler cannot always detecteach and every potential problem in yoursource files.This is where PC-Lint comes in.•Supports K&R C, ANSI C, and ANSI/ISO C++ standards•Explicit support for MISRA C andMISRA C++ (Motor Industry SoftwareReliability Association) standards•Value tracking of auto and staticvariables detects subtle initialization andvalue misuse problems•Inter-function Value Tracking -powerful inter-statement value trackingcrosses function boundaries•Optional strong type checking(typedef-based) with a rich option set todetect nominal type differences•User-defined semantic checking forfunction arguments and return valuesEach of the Keil development tools,ARM, C51, C251, and C166, supportGimpel Software's PC-Lint. Configurationfiles are included in the Keil developmenttools which enable you to quickly andeasily begin using PC-Lint in yourapplication development and testing./pclint大概意思就是Keil(ARM, C51, C251, and C166)支持PC-Lint,配置文件包含在Keil开发工具中,使您能够在应用程序开发和测试中快速轻松地开始使用PC-Lint。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

PC-Lint基本使用方法
PC-Lint配置文件介绍
PC-Lint使用那个配置文件是由命令行参数决定的,一般地
都使用std.lnt文件,std.lnt文件中可以包含各种配置选项, 还可以包含其他的配置文件,有点类似C的头文件,里面可 以include许多其他头文件,不过PC-Lint配置文件包含其他 配置文件不需要写include,直接写文件名就可以了。
PC-Lint基本使用方法
要检查所有包括子目录的文件可以使用以下方法:
lint-nt -id:\lint std.lnt AllSource.lnt 在AllSource.lnt文件中可以放置如下: Moudule1-Dir\*.cpp Moudule2-Dir\*.cpp Moudule3-Dir\*.cpp ... 当检查所有文件时不需要使用-u选项
一般情况下,我们都将自己要写的选项放
在Options.lnt文件中
PC-Lint基本使用方法
另外还有关于编辑环境的问题,如果把PC-Lint集成
到某个编辑环境中,那么他输入的格式必须和对应 环境吻合才能保证在鼠标点击(或双击)错误消息条 目时可以自动定位到对应源代码行,一般来说这类 配置都放置在env-xxx.lnt文件中,如VC6的时envvc6.lnt, SourceInsight的是env-si.lnt
每个配置文件里都可以包含配置选项,这些配置选项也可以
放在命令行中,一般为使用方便,命令行中不要放很多选项, 尽量都将选项放到配置文件中
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\vc98\include //include 目录 -id:\vc6\vc98\mfc\include //include 目录
代码走查工具—PCLint
目 录
PC-Lint简介
PC-Lint基本使用方法 PC-Lint常用选项
PC-Lint在各种环境中的集成
PC-Lint常见告警分析及解决措施
PC-Lint简介
PC-Lint是Gimpel Software公司开发的一个一个C/C++静态
语法检查工具,它不是一个Free 软件。一般来说,软件在 编译连接通过后就可以使用PC-Lint做静态检查。 项,1000多个告警。
PC-Lint常用选项
-fallthrough 这个选项主要是用在switch case中没有使用break的情况 可以在代码中使用//lint –fallthrough来消除没有使用break 的告警 -save 保存错误抑制状态 如:在代码中使用 //lint –save –e429则表示从这行开始 之后的代码抑制429告警的出现,直到使用//lint –restore 来进行恢复后才会重新出现429告警 -restore 重新设置错误抑制状态,使用-save选项抑制的告警将重 新恢复,在使用了-save选项后一定要记住使用-restore进 行恢复,否则可能有许多告警就被屏蔽调不出现了。
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基本使用方法
PC-Lint8.0主要由以下一些文件组成: Lint-nt.exe Windows下的执行文件 Msg.txt 全部选项帮助说明文件 PC-Lint.pdf PC-Lint的帮助文件 Config.exe 配置程序 Std.lnt 标准配置文件 Options.lnt选项配置文件 .\Lnt子目录下的各种开发编译环境的配置文件 其他一些文件
-u -iC:\Lint std.lnt $(FileName) 这里$(FileName)表示VC窗口里当前打开的文件名 你也可以将它改成$(FileDir)\*.cpp表示检查当前打开文件同一目录下 的所有.cpp文件,通常用于检查一个模块 还可以改成AllSource.lnt, 象前面讲过的一样,AllSource.lnt是一个放 置有所有文件的配置文件,这时要将-u去掉。
PC-Lint在各种环境中的集成
PC-Lint在各种环境中的集成
再在Initial Directory一栏里填上$(FileDir) 最后再将use output window打上勾就完成了将
PC-Lint集成到VC环境中
PC-Lint在各种环境中的集成
在SourceInsight3.1中的集成 在SourceInsight3.1中集成PC-Lint过程如下: 1)从Options菜单中选择“Custom Commands”命令项。 2)点Add键会出现下面的Add New Custom Command对话框
PC-Lint基本使用方法
一般来说,PC-Lint经常会有一些误报,为
了消除这些误报,不得不将程序风格改动 来规避,但有时候怎么改写程序都有告警, 比如说你定义了两个宏,前面那个宏里有 一半大括号{, 后面那个宏里有另一半大括 号}, 这时候一定会有告警,你不得不使用一 些PC-Lint选项来屏蔽这些告警。
在New command name:栏中输入“PC-lint80 ”,原则上这个名称 可以随便起,只要你能搞清楚它的含义就可以了,然后按OK按钮。
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
PC-Lint常用选项
-sem选项 这个选项主要是用来消除一些语义上的告警 比如说在一个函数A里面分配了内存,这时调用了另一个 函数AddNode将分配的内存保存起来了,因此在函数A里 面没有释放内存,如果使用PC-Lint检查会有内存泄漏方 面的告警,因为PC-Lint不知道函数AddNode将分配的内 存保存起来了,要消除这个告警就要用到-sem选项了。 假设AddNode的第2个参数是用来保存分配内存,用法如 下 -sem(AddNode, custodial(2)) 这里custodial关键字是表示保存的意思,2是表示第2个 参数。
象上一页里已经定义了AddNode为保存内存的函数,如果碰到还有 一个函数AddEvent也是有保存内存的功能,我们除了可以使用sem(AddEvent, custodial(2))外,也可以使用-function(AddNode, AddEvent), 效果是一样的。不过要注意的是AddEvent保存内存的参 数也要和AddNode一样是第2个。
PC-Lint在各种环境中的集成
PC-Lint在各种环境中的集成方法原理都是一
样的,只要掌握前面讲的基本用法,知道如 何用命令行来检测单个文件,一个目录下的 所有文件,许多目录下的所有文件等,然后 再结合各种环境的具体设置,就可以很方便 地将PC-Lint集成到各种应用环境中了。
下面将以VC6, SourceInsight, UltraEdit,
PC-Lint常用选项
其他一些常用选项还有 -elib 抑制库头文件的告警 -elibsym 抑制库头文件中某个符号的告警 -wlevel 设置告警级别 -efile 用来抑制一个或多个文件里的告警 -efunc 用来抑制一个或多个函数里的告警 +rw 设置保留关键字 等等。 象-efile, -wlevel这些告警不要轻易使用 这些选项的具体用法请看pc-lint.pdf文件
PC-Lint是一个命令行工具,在8.0版本里提供了300多个选
本篇培训材料旨在引导读者入门,学会PC-LINT的基本使用
方法,一些常见选项的使用,常见告警的分析及规避措施, 希望可以起抛砖引玉的作用,为读者深入掌握PC-Lint的使 用打下基础。 做的。
本篇材料主要是以PC-Lint8.0在Windows上的使用为基础来
-sem选项还有些其他用法,大家可以看PC-Lint自带的pclint.pdf文件,里面有详细的解析
PC-Lint常用选项
-function(function0, function1, …)选项
这个选项一般情况下主要是用来表示function1及后面省略掉的函数 和function0有类似的行为。 如:-function(malloc, mymalloc1, mymalloc2)表示mymalloc1, mymalloc2和malloc有类似的行为,因为malloc是用来分配内存的, 所以pc-lint在检查mymalloc1和mymalloc2时也会想检查malloc一样 看是否有释放掉
相关文档
最新文档