您的位置:首页 > 编程语言

PC-Lint 静态检测 VS编写的 解决方案代码

2015-08-21 18:25 253 查看
总结一下这两天的工作经验

PC-Lint简介:

PC-Lint 是GIMPEL SOFTWARE公司开发的C/C++软件代码静态分析工具,它的全称是PC-Lint/FlexeLint for C/C++,PC-Lint 能够在Windows、MS-DOS和OS/2平台上使用,以二进制可执行文件的形式发布,而FlexeLint 运行于其它平台,以源代码的形式发布。PC-lint 在全球拥有广泛的客户群,许多大型的软件开发组织都把PC-Lint 检查作为代码走查的第一道工序。PC-Lint不仅能够对程序进行全局分析,识别没有被适当检验的数组下标,报告未被初始化的变量,警告使用空指针以及冗余的代码,还能够有效地帮你提出许多程序在空间利用、运行效率上的改进点。

PC-Lint配置选项(更多查看《PC-LInt选项详解》):

主要用到的几个选项:

-i 选项,后跟要引入的目录,作为PC-Lint的搜索目录,例如VC的编译器头文件目录,Qt的头文件目录,和第三方目录,引入才能让PC-Lint找到

-d<Marco> 选项,Marco为需要引入的宏,PC-Lint会引入宏定义使预编译过程顺利进行,此选项对于运行平台和DEBUG/RELEASE选择较为重要

-e# 选项,PC-Lint对每一种错误、告警、风格信息等有一个特定的错误编号,(详细可以在 《PC-Lint错误代码大全》 或 PC-Lint安装目录下 msg.txt 中查看)

-w<Level>选项,错误提示的告警级别,本测试方案中选用Level=2,只显示错误与告警

+fce 选项, 启用#error继续执行,防止由于预处理错误导致检测无法完成

-“format=” 选项,显示错误打印格式

-zero(#) 错误号在 # 以上返回值都定为零

-header() 选项, 要引入的头文件工具,此选项用来加载lnt文件或者VS强制加载的头文件(为VS工具自动生成的、cpp文件中未包含的文件)

-/+libdir() 选项,是否把该路径下的include文件夹中的头文件当做库文件处理

-wlib(<Level>) 选项,库文件告警级别,将libclass和libdir确定的库文件中的告警屏蔽的级别

 

重要的lnt文件:

co-msc*.lnt 文件,定义VS编译的版本,定义编译器用到的选项和宏,例如auto的新特性是在C++11中增加的,co-msc100.lnt中包含的-A(2011)保证PC-Lint可以避免auto的Bad type

env-vc9.lnt lib-atl.lnt lib-mfc.lnt lib-stl.lnt lib-w32.lnt lib-wnt.lnt 文件,定义vc9,atl,mfc,stl,w32和NT的宏等配置

 

PC-Lint版本:

网上大多的版本都是9.00A,目前PC-Lint更新到了9.00L, 9.00L已经支持到C++2014和C11

例如,想要支持C++2011(支持auto动态转换)需要升级到9.00C

更新补丁方式为增量更新,具体方法:http://www.gimpel.com/html/ptch90.htm

 

针对VS项目的测试方案:

配置:如果采用VS2010编写,一个Solution中有多个vcxproj文件对应多个exe项目

解决方案;

采用python编写自动测试脚本,由于vcxproj文件具有xml结构,通过解析项目文件,

读取每个项目所要引用的头文件目录,所包含的cpp文件,以及项目定义的宏,生成lnt配置文件,

之后调用PC-Lint生成Log,最后分析Log去除第三方编写的代码告警

具体方式;

 

采用ElementTree和Xpath文件包含的Cpp,过滤掉Debug和Release文件下编译器自动生成的cpp文件

采用同样的方法,找到附加引用目录以及编译器的引用目录

最后找到前置加载引用头文件,用-header()选项引用其中的头文件

 

用以上方法可以检测VS下编写的代码,如果出现undeclared等问题大多数都是头文件未引用到,除此之外还需要注意引用顺序(PC-Lint检测头文件是以-i顺序查找,防止出现重名头文件匹配错误的问题)

其他问题可能出现在预编译过程中,要根据具体代码分析出错原因。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: