pc-lint使用

最近在做arm64的移植,在网上看到了lint系列静态代码分析工具,在windows下就是pc-lint了,便拿来用了一下,功能还是挺强大的。初次上手,过程中也遇到不少疑惑,写此文来记一下。

首先,安装好pc-lint后,可去官网上下载最新的补丁(包括补丁更新器lpatch和补丁配置如l9-a-b.lp),这些都是最新的功能补充,网址:http://www.gimpel.com/html/ptch90.htm。

初次安装好程序后,会让你做一下基本设置,之后也可以再打开CONFIG.exe来进行设置。这些设置会存在std.lnt中。

在安装目录中有PC-lint.pdf,这是参考手册,介绍了pc-lint的功能和使用。

将pc-lint集成到vs中,截止到目前已支持到vs2010、2012,后续新vs应该也都会支持的。目前我是在vs2008中使用的,只要在vs菜单中点击“工具”,再点“外部工具”,弹出的对话框中点击“添加”。然后:

1. 标题:随便写一个,如pc-lint,后面可加个快捷键,即加:(&7),这样以后就可以在依次点击:alt > T > 7,就可以执行pc-lint分析当前cpp了。

2. 命令:即pc-lint的exe路径,如:D:\z__program_files\lint\lint-nt.exe。

3.

参数:给lint-nt.exe的参数,因为pc-lint是像linux中众多工具一样,是靠强大的命令选项来执行功能的。如:-
i"D:\z__program_files\lint" std.lnt env-vc9.lnt --u
"E:\dev\lint_use\$(ProjectFileName).lnt"
$(ItemPath),-i是添加目录,std.lnt是配置,env-vc9.lnt是针对vs2008的配置,--u(是两个“-”哈)是说对单个
文件进行分析,后面一个是工程的lnt配置文件(下面要讲),itempath就是当前cpp了。其中$(xxx)都是和工程属性中一样的宏,通过点击右
边的箭头也可以给你生成出来。

4. 初始目录:写$(ProjectDir)就好了。

然后就可以在vs中使用pc-lint了,分析结果会出现在输出窗口中。点击具体错误,可定位到相关文件的相关行上。


一下,其中涉及到工程的lnt配置文件,主要是一些头文件包含目录的生成,这个pc-lint已经为你准备好了,只需要执行一个命令,就可以通过vs工程
属性文件来生成lnt文件。即:D:\z__program_files\lint>  lint-nt
"E:\dev\xxx\xx.vcproj" >"E:\dev\lint_use\xx.vcproj.lnt",


先打开windows命令提示符,最好以管理员身份运行,进入lint安装目录,再输入以上的lint-nt及后面的命令,注意
xx.vcproj.lnt中的xx要和前面的xx.vcproj相同,因为上面外部工具中设置参数时用的宏是工程完整名。我是将所有的工程.lnt文件
都生成到一个统一的E:\dev\lint_use目录下的。最后还需注意:

因为vcproj文件中,有时有用到类似%SolutionDir%的宏,pc-lint是没识别出来的,这个我不知道是否pc-lint有支持,我是用文本编辑工具打开.lnt文件,直接编辑将其中的%SolutionDir%替换为真实的绝对路径。

配置都是.lnt文件,就是在其中加入命令参数控制功能,我觉得你也可以创建自己的lnt文件,虽然我还没试过,哈哈。这些文件熟悉了之后都可以自己用文本编辑器直接编辑。

首先讲一下std.lnt,其中是你作的配置。文件内容比如:

//  Microsoft Visual C++ 2008, -si4 -sp4, lib-atl.lnt lib-mfc.lnt lib-stl.lnt lib-w32.lnt
//  Standard lint options

au-LP64.lnt		// v_add: for LP64 model (should before options.lnt)

co-msc90.lnt
lib-atl.lnt lib-mfc.lnt lib-stl.lnt lib-w32.lnt
options.lnt  -si4 -sp4
-i"C:\Program Files\Microsoft Visual Studio 9.0\VC\include"
-i"C:\Program Files\Microsoft Visual Studio 9.0\VC\atlmfc\include"
-i"C:\Program Files\Microsoft SDKs\Windows\v6.0A\Include"
-i"E:\boost_1_54_0"

+libdir(E:\boost_1_54_0)

其中au-LP64.lnt是自己后来加上的,主要是为了做64位移植,指定是LP64数据指针模型。这个要放在options.lnt之前,因为options.lnt对这个有些功能指定做了修改。

+libdir(E:\boost_1_54_0),
是指将指定文件夹,比如此处的boost,指定为库目录,注意这个目录要是已经属于包含目录了,即前面用-i"E:\boost_1_54_0"加过了,
此两目录指定需要一致,+libdir中指定 -i 中的子目录也是不行的。


来介绍下options.lnt,这个文件主要用来自定义一些你自己想要的功能,就是在原来的功能上取消掉某些warning的产生,因为pc-lint
是很严厉的,而有些甚至是建议性的,你不需要完全按照它的要求来(相信也没有人能完全达到这个要求,或者说不在乎其中的有些要求)。关于这个文件中能配置
的选项,可参见PC-lint.pdf中的Appendix A。

其中的内容如,都是我自己加的哈:

// Please note -- this is a representative set of error suppression
//                options.  Please adjust to suit your own policies
//                See  manual (chapter LIVING WITH LINT)
//                for further details.

// lib
-wlib(0)
//-elib(1275)		// boost cause internal error   fixed by new patch / wlib(0)

// suppress is ok
-e958		// padding align in struct
-estring(958,member)	// up, suppress for au-64.lnt
-e917		// Prototype coercion, e747 is enough.(e.g.: 917: int to unsigned int, int to unsigned long; 747: int to unsigned long)
-e970		// Use of modifier or type ‘Name‘ outside of a typedef
-esym(970,long)			// up, suppress for au-64.lnt

// may open for v_self use
-e715		// Symbol ‘Symbol‘(Location) not referenced
-e732		// loss of sign: int ro unsigned, int to unsigned long (e570 is enough: negative constant to unsigned, (unsigned long)-1)

// tmp for test

-wlib(0) 是设置库代码的报警等级,默认为-wlib(2),我设置为了最低的-wlib(0),这样库中的错误和警告都不会有提示,哈哈。
-elib(1275),是指对库中代码的某个错误屏蔽,此处为1275,这些错误号都可以在pc-lint手册中看到具体描述。

上面提到把boost的目录设为了库目录,就是因为boost中很多东西会被检测出来有错误,可能模板技术用的太炫,pc-lint没hold住啊。这样在我设置的-wlib(0)下,boost就被忽略了。

-e#,是具体屏蔽某个错误。

还有像-estring,-esym这些大家就看手册吧。

最后,pc-lint主要是用来对单个文件进行分析,不过一般也是这样,你需要针对每个c / cpp来分析,相应根据分析的结果进行修改。


上有人也写出了一个方便pc-lint来管理工程的工具,叫做LintProject,可以将一个工程的结果全部分析出来,然后生成html文件,可以方
便的打开查看。其实,它就是针对工程的每个文件都执行了下pc-lint分析而已。下载地址:http://www.codeproject.com
/Articles/8526/LintProject-Improving-the-Usability-of-PC-Lint-wit 。

它其中用到的命令大致是这样:
  
         <lint-folder>\lint-nt.exe -i"<lint-folder>" -b -u
std.lnt env-vc7.lnt -i"Debug" <source file> >Lint\<source
file>.txt

相当于把生成结果重定向到某个txt中了。其中env-vc7.lnt和env-vc9.lnt其实内容是一样的。

将下下来的LintProject中的可执行文件LintProject.exe放进pc-lint的目录下,我们就可以在命令提示符中来使用这个工具:
D:\z__program_files\lint>  LintProject.exe E:\dev\xxx\xx.vcproj E:\dev\lint_use\result /cfg"Debug|Win32" /param"" /s。

它就会自动将分析好的结果在打开的html文件中展示出来,可以看到这个工程的每个文件分别有多少警告提示。具体其他使用,可以在上面的下载网页中看到说明。

好了,pc-lint就介绍到这了,大家都尝试一下吧,看看你是否符合一个程序员的自我修养哦。

时间: 2024-10-12 20:41:42

pc-lint使用的相关文章

debug makefile 及 lint 软件质量软件

make -d should give you more than enough information to debug your makefile. Be warned: it will take some time and effort to analyze the output but loading the output into your favorite editor and doing searches will assist a lot. You can greatly red

编写高质量的代码

C语言基础 高质量的代码 简洁,有效代码行数,注释代码比例(20%),可靠,可测试性(每一个模块都便于测试),可维护性(代码便于阅读),可移植性(改变运行环境,代码依旧可以运行) 代码的坏味道 过长的函数(50),过多的函数参数(5),过多的局部变量(5), 重复代码,数据泥潭(有些数据项,喜欢成群结对),长switch语句, 代码的重构 函数拆分(单一职责),函数提炼, 代码注释是程序设计人员与程序阅读者之间的桥梁,非常有助于提高代码的可维护性.代码的注释要简洁明了,而且需要有意义. 过少的注

用VC进行64位编程

用VC进行64位编程 分类: C/C++2014-04-30 15:14 532人阅读 评论(0) 收藏 举报 本文转自:http://www.usidcbbs.com/read-htm-tid-5247.html   献给c/c++的同学.它包括创建一个64位安全的应用程序或者是从32位迁移到64系统的所有步骤.该介绍一共包括28课,涉及的内容有64位系统,64位应用程序的构建,如何找64位代码的问题和如何优化.第一课:64位的系统是什么 在写这个课程的时候,有2个流行的微处理器的64位架构:

Top 40 Static Code Analysis Tools

https://www.softwaretestinghelp.com/tools/top-40-static-code-analysis-tools/ In this article, I have summarised some of the top static code analysis tools. Can we ever imagine sitting back and manually reading each line of codes to find flaws? To eas

软件质量保证与测试03

白盒测试:分析组件.系统的内部结构,并设计相应的测试用例进行的测试 (结构测试.透明盒测试.逻辑驱动测试.基于代码的测试) 1.为什么要引入白盒测试: 对于行业严格要求的代码,比如军事.金融.医学等必须严格白盒测试 可以洞察程序中的一切,往往可以进行比较完整的测试 2.分类: 静态白盒测试,动态白盒测试 白盒测试方法:控制流分析.数据流分析.覆盖分析.路径分析.符号测试 3.白盒测试应用范围: 可以用于所有的系统开发阶段,包括单元测试.集成测试和系统测试. 通常进行路径测试,可以测试单元内部.单

前端里移动端到底比pc端多哪些知识?

前端里移动端到底比pc端多哪些知识,为啥面试时好多公司都问h5水平如何? 我做过几年的web前端开发,就简单谈谈自己的感受吧. 首先来看看PC端和移动端在前端开发上的一些区别: (1)PC考虑的是浏览器兼容性,移动端开发考虑的更多的是手机兼容性,因为目前不管是android手机还是ios手机,一般浏览器用的都是webkit内核,所以做移动端开发,更多考虑的应该是手机分辨率的适配,和不同操作系统的略微差异化: (2)在部分事件的处理上,移动端自然是偏向于触屏的,所以触屏事件的一些规律要多摸索一下,

php判断是手机登陆还是PC登陆

// 判断是手机登陆还是PC登陆 function ismobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) return true; //此条摘自TPM智能切换模板引擎,适合TPM开发 if(isset ($_SERVER['HTTP_CLIENT']) &&'PhoneClient'==$_SERVER['HTTP_CLIENT']) return true; //

java企业站源码 响应式 兼容手机平板PC 主流SSM 框架 freemaker 静态引擎

java 企业网站源码 前后台都有 静态模版引擎, 代码生成器大大提高开发效率 前台: 支持三套模版, 可以在后台切换 点击:获取地址   QQ 313596790 官网 http://www.fhadmin.org/ 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC.平板.手机(三合一)浏览器访问 4

canvas实现移动端和PC端刮刮卡效果

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"

我所追求的简约、便携、极简的未来生活——智星空移动迷你Smart PC开箱上手体验

很奇怪,我们不屑与他人为伍,却害怕自己与众不同.——By保罗.柯艾略 我从小喜欢新奇的事物,喜欢尝试一些稀奇古怪的东西.在科技迅猛发展的这个时候,我在数码产品方面的兴趣从未减退,从以前的BB机到如今的肾6,我从未停下追随的脚步.今天给大家带来的是一款革命性的产品,它将PC做到了极致,在这个新奇事物如雨后春笋一般的时代中,脱颖而出.这就是我今天要介绍的,智星空Smart PC,全球最小mini主机. 深圳智星空技有限公司(ZXK)是中国唯一专注于微型电脑主机研发与生产的品牌. 专注于智能化.微型化