linux pclint配置_自动代码检查分享之PCLINT
当我们花了很长时间来重现和排查一个问题后,发现原来是由于变量未赋初始值;当我们排查一个客户重大异常后,发现原因尽然是IF判断时用了单等号。这些都是比较低级的问题,但凡一个有基础的程序员都能看出来写错了,但是每个人都有可能犯这种错误,那么如何避免类似的错误出现呢?
俗话说:常在河边走哪有不湿鞋,对于这种有规则且重复性的工作,靠人工是不行的,必须要引入工具检查,从而避免此类错误的再次出现。而对于C/C++代码静态检查工具,比较有影响力的就是PCLINT了。
当我们偿试使用PCLINT时,发现PCLINT的环境搭建非常复杂,并且开发者每个人的环境都各有差异。使用过程中,需要排查各种问题,需要全代码的检查,需要手工逐个编译项目,加上排查问题,统计问题个数,总共会花2天左右的时间。这样的效率是非常影响项目执行进度的。
“偷懒”是人之本性,像这种重复情的工作当然要做成自动化了,于是就有了自动PCLINT代码检查工具。
▲当工具编写完成后,一些现象得到改观:
原来2天做一次全代码检查,现在变成了10分钟检查一次。
原来需要每个开发搭建环境,现在开发直接从SVN上检出资源,修改几个简单变量修改即可实现本地检查,避免了大家的环境差异,降低了环境搭建成本。
从代码检出到报告发送完成,全流程自动完成。
我们先直观地看一下工具的输出效果:
通过这个邮件,配管人员很容易确定代码还存在问题的是个组,自然落实起来就会容易不少。附件的日志可以直接查看PCLINT检查报出来的错误,同样也方便了开发人员。
▲工具的使用,步骤简单:
在编写工具的过程中容易碰到以下几个问题:
1、后台服务有不少是采用proc语言编写的程序,而PCLINT是不支持.pc文件检查的,如何处理?
2、PCLINT工具是windows版本的,普通开发的环境也基本是windows的环境,所以在windows下面检查比较方便,但是又需要依照linux的代码编译方式来检查,这样可以使得检查结果更准确,如何处理?(PS:如果在Linux环境下开发,可以考虑使用FlexeLint )
3、如何实现自动化检查?
针对以上问题,笔者最终找到了以下解决方案:
1、 PCLINT不支持.pc文件检查,我们可以预编译成.c/.cpp文件后,再执行检查。
2、 PCLINT只能在Windows执行检查,那么就在Windows上模拟Linux的编译环境。
下载Linux下编译所需的头文件:/usr/include、/usr/lib/gcc,上传到SVN上。
Proc编译时,也需要按照Linux方式编译,检查发现proc.exe中存在一个宏定义MSC_VER,表示按照windows的方式编译,那么把这个变量宏定义改掉,自然就按照Linux的方式来编译了,于是把MSC_VER改成了MSC_V1R,问题搞定。
自动化检查的执行工具采用Jenkins。
工具开发采用了BAT+JENKINS的技术实现,下面我们来看看工具的处理流程:
▲以下是成型的工具及核心代码展示:
1、JENKINS工程的配置
2、存放到SVN上的全部资源
其中Linux目录是后台的源文件,oracle目录是修改后的proc.exe存放路径,pclint目录是pclint工具的可执行文件,checkpclint_homs.bat是执行自动检查的主程序。
3、编译PC文件的BAT脚本
4、检查.c和.cpp文件的BAT脚本
至此,PCLINT检查工具的分享完成,希望对大家有所帮助。
版权所有 侵权必究
如需转载请联系
0571-26691657
linux pclint配置_自动代码检查分享之PCLINT相关推荐
- linux pclint配置_64位系统下,执行pclint检查的问题: Unable to open include file 'stddef.h'...
工作中碰到的一个问题: 项目的编译原来是在32位linux系统上进行编译的,并且是通过wine运行pclint.exe来进行lint检查. 现在要把项目放到docker container中进行编译, ...
- linux pclint配置_代码静态分析工具PC-LINT安装配置
PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器.它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误. C语言的灵活性带来了代码效 ...
- linux pclint配置_静态分析工具PC-lint Plus使用教程:安装与配置
PC-lint Plus是一种静态分析工具,通过分析C和C ++源代码来发现软件中的缺陷.与编译器一样,PC-lint Plus会解析源代码文件,执行语义分析,并构建一个抽象语法树来表示程序.PC-l ...
- php 代码 自动检查工具下载,PHP_CodeSniffer安装和使用教程(自动代码检查规范工具)...
在我们开发中都会讲究代码规范,若是个人开发者,代码规范与否,只要自己看得懂便可以了,但是在团队协作中,代码规定尤为重要,下面,我们介绍一款PHP_CodeSniffer,自动检查代码规范的工具. PH ...
- eslint 配置_前端代码规范配置 (一)
ESLint ESLint 是一个开源的 Javascript 代码检测工具,通过将 js 代码解析成抽象语法树(AST),分析并给与代码质量(如一些方法的使用方式不对)和代码风格(缩进,引号等等)两 ...
- Linux网络配置——从自动获取IP地址转为固定IP地址
众所周知,Linux中有两种获取ip的方式,那么自动获取IP地址和指定IP地址有什么区别和特点呢?为什么Linux程序员都需要使用固定IP地址呢? 如下所示: 两种获取方式的优缺点 1. 自动获取 ...
- linux清理缓存_自动清理linux系统内存和Cache方法
1.手动清理内存和Cache方法 Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total ...
- Linux centos7 配置用户自动登录
1.编辑文件 [root@CentOS6 ~]# vim /etc/gdm/custom.conf GDM configuration storage [daemon] AutomaticLoginE ...
- linux万年历,万年历_十万代码进行时的技术博客_51CTO博客
这是一个实现万年历的程序,我从书上copy到TC.exe上,再修改了多次依然未能完美的呈现万年历的效果.各位高手教教我吧~!注释部分纯属我个人的理解,还有我不理解之处. #include int Is ...
最新文章
- Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
- ios可变数组的操作
- Linux内核源码学习
- 至于你信不信,我反正是信了——以类为单位的编程思想
- Linux定时检测内存,若使用率超过指标,重启Tomcat并清空内存
- “未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案
- Go语言---并发编程goroutine
- 循环体中调用[NSString stringWithFormat:@%@,Object] 方法的内存问题
- WebView与js的交互
- 终于找到破坏(被锁)广联达云计价平台GCCP6.0工程文件的罪魁祸首,显示:您的工程可能受到盗版侵害……
- 想要定制个性化语音?来试试这几个配音软件
- CRC校验,用于大家参考和日后查阅,内容引用github,非本人创作。
- 一套比较完备的在ubuntu 18.04系统上部署nginx+postgresql+php的记录
- 电机原理及电机拖动实验系统
- Jmeter系列(68)- BeanShell 内置变量 prev
- 记录:macbook 下剪切快捷键
- tvOS游戏开发系列(SpriteKit)之准备工作(一)
- 必不可少的数学基础-单调有界定理
- 计算机专业英语2017课后答案,计算机专业英语考试试题及答案
- OpenGrok搭建方法
热门文章
- Git之先拉取再推送
- 大学所有专业都要学c语言吗,是不是大学里的所有专业都会学一些计算机基础内容...
- [色彩]迅速判断16进制颜色值呈色
- 自制简单的linux 系统
- notepad++比较两文件的不同
- homestead virtubox
- 在Premiere中使用变形稳定器要求剪辑尺寸与序列匹配
- 西南科技大学计算机网络实验四,西南科技大学计算机网络-实验三.pdf
- 兔子搬萝卜 猴子搬香蕉 算法实现
- android 拖动和缩放 [Dragging and Scaling]