PC-lint使用文档
- 格式:docx
- 大小:291.99 KB
- 文档页数:8
1.1简介如果要给lint工具下一个形象点的定义,那就是:一种更加严格的编译器。
它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。
请看下面的例子:1:char *report( int m, int n, char *p )2:{3:int result;4:char *temp;5:long nm;6:int i, k, kk;7:char name[11] = "Joe Jakeson";8:nm = n * m;9:temp = p == "" "null" : p;10:for (i = 0; i < m; ++i)11:{12:k++;13:kk = i;14:}15:if (k == 1) result = nm;16:else if (kk > 0) result = 1;17:else if (kk < 0) result = -1;18:if (m == result) return(temp);1机密文件,知识产权属迈瑞公司所有第 1 页共 1319:else return(name);20:}上面的代码用一般的编译器编译是一段有效的代码,但是用PC-Lint编译就会有几个告警。
首先第7行向name数组赋值时丢掉了nul字符,第8行的乘法精度会失准,第9行的比较有问题,第12行的变量k没有初始化,第13行的kk可能没有被初始化,第18行的result也有可能没有被初始化,第19行返回的是一个局部对象的地址。
这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但PC-Lint只通过一次简单的编译就可做到,显然为我们节省了大量的开发时间。
1.安装配置PC-LINT安装PC-LINT,Gimpel_PC_Lint_9建议安装到C:/lint下,后面有一些配置网上没有解决方案,所以我手动做了一些配置。
装在C/lint下的话直接使用就可以了,就不用修改参数了。
安装完成后勾选I want to run the configuration program now,然后点finish这个版本尚未支持2012,所以只好选2008↓完成。
2.把PC-LINT集成到2012 VS2012->工具->外部工具->添加标题:pc_lint命令:C:\lint\lint-nt.exe参数:-i"c:/lint" std.lnt env-vc9.lnt "$(ItemDir)$(ItemFileName)$(ItemExt)" 初始目录:$(ItemDir)“使用输出窗口”打勾↓点击工具,就会出现刚配好的外部工具:这时候检查的是当前文件,而不是整个工程运行结果:但是结尾会出现这个错误:#include "ProfileManager.h"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3\framework\base\ProfileManager.cp p(1): error 322: (Error -- Unable to open include file 'ProfileManager.h')错误提示是找不到ProfileManager.h。
网上也搜到解决办法。
我的解决办法是修改C:\lint\ std.lnt,在std.lnt中手动加上所有.h的路径(绝对路径)我的本地工程文件在C:\Users\Administrator\Desktop\VM3_Connection_Manager我的std.lnt内容:// Microsoft Visual C++ 2008, -si4 -sp4, lib-atl.lnt lib-mfc.lnt lib-stl.lnt lib-w32.lnt// Standard lint optionsau-sm123.lnt au-ds.lntco-msc90.lntlib-atl.lnt lib-mfc.lnt lib-stl.lnt lib-w32.lntoptions.lnt -si4 -sp4-i"D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include"-i"D:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\include"-i"C:\Program Files (x86)\Windows Kits\8.0\Include\shared"-i"C:\Program Files (x86)\Windows Kits\8.0\Include\um"-i"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3\framework\base\include"-i"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3"-i"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3\common lib\include"-i"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3\framework\controllers\include" -i"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3\framework\devices\include"-i"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3\framework\profiles\include"-i"C:\Users\Administrator\Desktop\VM3_Connection_Manager\VM3\hyperroaming\include"红色为后加的,这样不是长久之计,懂的童鞋研究研究怎么能一下包含所有的.h3.VISUAL-LINTVisual Lint是一个交互式的代码分析工具,为C、C++、C#和Java的代码分析工具,包括PC-lint、CppCheck、FxCop和FindBugs,提供了易于使用的前端界面。
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使用说明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工具使用说明书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"指的是对输出结果的执行文件。
1基本概念手册描述的软件有两种方式。
对于PC市场(Windows、MS-DOS、OS/2),产品是二进制可执行文件格式。
对于其它平台,是C源代码形式,名字是FlexeLint。
我们在手册的全部部分使用术语PC-lint/FlexeLint 标识所有平台公共的行为。
PC-lint/FlexeLint 是一个发现一个模块或多个模块的C和C++程序的勘误表的软件包。
它使用K&R 和ANSI作为K&R C的标准;它使用ANSI/ISO 委员会文档作为C++的标准;很多C ’99 标准的特性集成到这个产品中,但是目前没有支持所有的C’99标准。
根据用户程序的大小来决定总共的需要的内存大小。
尤其是,存储的需求依赖于头文件的大小。
粗略估计,每2000行头文件需要的内存存储量大约是1Mb。
PC-lint包包含三个可执行文件:一个Windows可执行文件、一个DOS-extended 可执行文件和一个OS/2 32位可执行文件。
Windows 可执行文件运行在一个Windows环境下的32位控制台应用环境下。
DOS 扩展的可执行程序运行在MS-DOS环境下,使用80386 DOS 扩展技术来访问所有的存在的扩展内存。
OS/2 32位可执行程序只运行在OS/2环境下。
FlexeLint包主要由C 源代码组成,可以被编译到任何系统。
FlexeLint安装的详细信息可在FlexeLint包中的"FlexeLint Installation Guide"找到。
2简介PC-lint/FlexeLint发现C和C++程序中的怪癖、异质、失灵和臭虫。
这样分析的目的是发现这些程序中的在集成前的潜在的问题,揭示可能包含敏感的、未检测到的错误的不寻常的结构。
因为它寻找几个模块而不仅仅是一个,它可以发现编译器不能发现的事情。
它通常比编译关于很多细节更爱挑剔。
2.1一个例子考虑下面的C/C++程序(我们故意使这个例子小巧和可理解):1:2: char *report( short m, short 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:n m = n * m;11:t emp = p == "" ? "null" : p;12:f or( i = 0; i < m; i++ )13: { k++; kk = i; }14: i f( k == 1 ) result = nm;15:e lse if( kk > 0 ) result = 1;16:e lse if( kk < 0 ) result = -1;17: i f( m == result ) return temp;18: e lse return name;119: }对于大多数的编译器来说,它是一个有效的C (或C++) 程序。
1.1简介如果要给lint工具下一个形象点的定义,那就是:一种更加严格的编译器。
它不仅可以象普通编译器那样检查出一般的语法错误,还可以检查出那些虽然完全合乎语法要求,但很可能是潜在的、不易发现的错误。
请看下面的例子:1:char *report( int m, int n, char *p )2:{3:int result;4:char *temp;5:long nm;6:int i, k, kk;7:char name[11] = "Joe Jakeson";8:nm = n * m;9:temp = p == "" ? "null" : p;10:for (i = 0; i < m; ++i)11:{12:k++;13:kk = i;14:}15:if (k == 1) result = nm;16:else if (kk > 0) result = 1;17:else if (kk < 0) result = -1;18:if (m == result) return(temp);19:else return(name);20:}上面的代码用一般的编译器编译是一段有效的代码,但是用PC-Lint编译就会有几个告警。
首先第7行向name数组赋值时丢掉了nul字符,第8行的乘法精度会失准,第9行的比较有问题,第12行的变量k没有初始化,第13行的kk可能没有被初始化,第18行的result也有可能没有被初始化,第19行返回的是一个局部对象的地址。
这段代码在大部分编译器下是可以顺利编译通过的,继续查找其中的错误就要靠人工调试程序,如果程序很大,这将是一项烦琐的工作,没有人可以保证能找出所有的这类问题,但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编译器的标准库模块。
二 级 文 件 文件编号: Q/ECT SJ004 Codewarrior 中PC ‐lint 使用指南页次:第 1 页 共 6 页版次: 1/0常州易控汽车电子有限公司Codewarrior 中PC-lint 使用指南文件编号 ECT/YF-SJ-004 生效日期 2012-02-29 版 次 1/0 管理状态制定 审核批准方成Codewarrior中PC‐lint使用指南 第ii页常州易控汽车电子有限公司 产品研发部Codewarrior中PC-lint使用指南编 号 ECT/YF‐SJ‐004(A)适用产品型号批准: 日期:编 制 校 对 审 核 标 审 审 定 产品研发部 方成工程技术部 生产制造部 质量管理部 经营管理部 市场部 顾客代表更改单号 签 字 日 期文 件 分 发 单 位单 位 数 量 单 位 数 量 单 位 数 量 产品研发部 经营管理部 质量管理部工程技术部 市场部 生产制造部存 档分发人姓名:第iii页 Codewarrior中PC‐lint使用指南文档说明本文档更新历史版本 制定者 日期 更新内容 1/0 方成 2012年02月29日Codewarrior中PC‐lint使用指南 第4页1. Target Settings选项:修改Linker配置成“PCLint Linker”。
2. PCLint Main Settings选项选择PC‐Lint安装的目录第5页 Codewarrior中PC‐lint使用指南3. PCLint Options选项加入“au‐misra2.lnt”,确保该文件au‐misra2.lnt在安装目录下(该文件可以在PC‐lint官方网站上下载)。
Codewarrior中PC‐lint使用指南 第6页4. 编译文件选中要检查的文件,右键菜单,选择“Compile”,即可检查该文件是否满足MISRA 规范。
务必注意在使用PC‐lint检查前,使用Codewarrior编译器能够编译通过该文件。
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 -v
PC-lint for C/C++ (NT) Vers. 9.00e, Copyright Gimpel Software 1985-2010
3.配置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\include
C:\Program Files \Microsoft Visual Studio 8\VC\include
C:\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)
最后完成配置。
4.PC-lint集成到VC2005
4.1编译单个文件
配置好PC-lint之后,下面就将它集成到VC2005中。
一、打开VS2005开发环境
二、选择工具菜单----外部工具
三、单击添加按钮新增内容
标题为pc_lint(这个可以任意命名),命令为C:\lint\lint-nt.exe(这个为lint-nt的绝对路径),参数为-i"c:\lint" std.lnt env-vc8.lnt "$(ItemDir)$(ItemFileName)$(ItemExt)",初始目录为$(ItemDir),勾选"使用输出窗口",点击确定完成集成。
4.2编译整个工程
对编译整个工程的配置,网上流传两种方式:
1、编译整个工程同编译单个文件类似,需在VS中添加一个外部工具,方法同上节一样,只是要把参数改为:i"c:\lint" std.lnt env-vc8.lnt -u"$(TargetName).lnt" "$(ItemPath)",初始目录改为:$(ProjectDir)。
如下图所示:
此方法,本人试过,貌似不可以。
2、借用Unix的一个工具来实现,暂时没试过。