码迷,mamicode.com
首页 > 其他好文 > 详细

pc-lint使用

时间:2015-02-12 02:03:53      阅读:1063      评论:0      收藏:0      [点我收藏+]

标签:静态代码分析   lintproject   

最近在做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就介绍到这了,大家都尝试一下吧,看看你是否符合一个程序员的自我修养哦。







本文出自 “v” 博客,请务必保留此出处http://4651077.blog.51cto.com/4641077/1613812

pc-lint使用

标签:静态代码分析   lintproject   

原文地址:http://4651077.blog.51cto.com/4641077/1613812

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!