网上有很多将PCLint集成到SourceInsight中的文章,但全部都是基于VC开发平台的。由于我们公司开发软件最常用的工具组合为基于VxWorks系统的Tornado+SourceInsight开发平台,所以此文档主要基于此开发平台进行说明。希望能够给大家来带帮助。
1、解压PCLint8.rar到D盘根目录下(为了减少过多的设置,直接解压到D盘根目录是最方便的;注意:必须使用此压缩包中的PCLint)。
2、打开“D:\PCLint8”文件夹,用记事本或UltraEdit打开std.lnt文件,如下图所示:
图1-1
3、上图std.lnt中,红框1中的两个路径要设置成大家自身Tornado目录下的路径;红框2中的路径需要包含自身工程路径中头文件的路径(不需要包含C/C++标准头文件的路径)。注意:这里头文件要包含全面,包括驱动库提供的头文件、自身定义的头文件。如果头文件包含不全,在进行代码检查时首先就会提示找不到头文件,无法继续进行代码检测。这时,你可以直接在代码中注释掉找不到的头文件,或者红框2中加入相应头文件的路径。
4、std.lnt文件设置保存完成后,就可以设置SourceInsight把PCLint集成进去。从Options菜单中选择“Custom Commands”命令项。点Add键会出现下面的Add New Custom Command对话框。在New command name:栏中输入“PC-lint80”,原则上这个名称可以随便起,只要你能搞清楚它的含义就可以了,然后按OK按钮。
图1-2
5、在Run栏中输入“d:\PCLint8\lint-nt -u -id:\PCLint8 std.lnt env-si %f”其中d:\PCLint8是你PC-LINT的安装目录, %f是表示当前打开的文件。如果要Lint多个文件则需要使用配置文件,在配置文件里包含多个文件,将%f改成你自己的配置文件即可(建议只包含一个文件,一个一个的查问题)。
6、在Output栏中选择“Iconic Window”、“Capture Output”。
7、在Control栏中选择“Save Files First”、将缺省打了勾选上的“Pause When Done”改成不选择。
8、在Source Links in Output栏中选择“Parse Links in Output”、“File,then Line”。
9、在Pattern栏中将缺省设置改成^\([^ ]*\) \([0-9]+\)就大功告成了。
10、如果需要Lint当前打开文件的同一目录下所有文件,可以将%f改成%d\*.cpp(不推荐这样做,一个文件一个文件的查比较好)。整个设置截图如下:
图1-3
11、设置菜单按钮。点击上图“Menu…”,弹出新对话框,如下图所示。找到“PC-Lint80”,在“Menu”下拉框中选择菜单所处的位置,我选择的为“Search”,然后选中<end of menu>,点击Insert按钮,这样PCLint就加入到SourceInsight的菜单里了。
图1-4
12、设置快捷键。点击上图“Key”按钮,弹出新对话框,如下图所示。点击“ Assign New Key”,然后设置成“Shift+F11”,点击OK。这样快捷就设置好了。到此PCLint就成功集成到SourceInsight中了。
图1-5
1、首先点击到想要检测的文件,如下图,我以自身工程的xcu.c文件为例。
图2-1
2、如下图所示,点击Search,选择PC-Lint80;或者用已经设置好的快捷键“Shift+F11”。
图2-2
3、运行结果如下图所示。特别注意:下图结果报的头文件错误,任何头文件错误都会终止检测,所以下图的结果并不代表xcu.c代码没有问题。遇到这种情况,首先要解决头文件中的错误,如果无法解决或并不想关心此头文件错误,可以直接在xcu.c中注释掉此头文件。
图2-3
4、注释掉后,再次点击运行PC-Lint80,结果如下图所示。这时xcu.c正常被检测。例如:红框1,ApiSetPortSpeedAndDuplex()函数重复定义;红框2:send_to_clock[index]可能会产生数组越界。
图2-4
5、修改所有代码漏洞后,再次运行PC-Lint80,如下图所示。证明代码修复完成。
图2-5
注意:PCLint不是完全智能的,当它报错时,可能人工根据代码逻辑检查会发现代码其实没有问题。但为了提高代码质量,建议尽量改进报错的代码(用assert保证)。据非官方消息,PCLint在很多大型公司中被广泛使用,有些公司甚至要求消除所有PCLint的报错才允许编译代码或进中试。所以推荐大家使用此工具,从源头上杜绝软件问题,以提高代码质量。
文章中提到的PCLint压缩包下载地址:PCLint.rar
如需转载,请注明原文链接:http://blog.csdn.net/love_lei/article/details/7333349