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顺序查找,防止出现重名头文件匹配错误的问题)
其他问题可能出现在预编译过程中,要根据具体代码分析出错原因。
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顺序查找,防止出现重名头文件匹配错误的问题)
其他问题可能出现在预编译过程中,要根据具体代码分析出错原因。
相关文章推荐
- delphi XML 原来可以玩接口
- day7: 类的扩展 NSDate NSDateFormatter Category Extension延展 Protocol协议 delegate代理
- c++学习笔记(三)多态性
- Spring security 集成ldap服务,实现统一验证
- Delphi文件映射
- Delphi中ADO异步执行方式
- 读Java Concurrency in Practice. 第六章.
- Struts2学习笔记——02
- C#实现由四周向中心缩小的窗体退出特效
- Spring MVC 中的基于注解的 Controller
- Java学习笔记·#1·Java环境搭建
- 怎样打包java文件,使之能直接在系统下运行
- C# FTP操作类
- iOS中OC字符串与C语言字符串之间的相互转换
- PHP路由技术的原理与实践
- 一首诗的代码
- 一首诗的代码
- C++ Primer 5e chapter 9.2
- Delphi中的THashTable
- java开发个人总结笔记 小技巧