当我们花了很长时间来重现和排查一个问题后,发现原来是由于变量未赋初始值;当我们排查一个客户重大异常后,发现原因尽然是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相关推荐

  1. linux pclint配置_64位系统下,执行pclint检查的问题: Unable to open include file 'stddef.h'...

    工作中碰到的一个问题: 项目的编译原来是在32位linux系统上进行编译的,并且是通过wine运行pclint.exe来进行lint检查. 现在要把项目放到docker container中进行编译, ...

  2. linux pclint配置_代码静态分析工具PC-LINT安装配置

    PC-Lint是C/C++软件代码静态分析工具,你可以把它看作是一种更加严格的编译器.它不仅可以检查出一般的语法错误,还可以检查出那些虽然符合语法要求但不易发现的潜在错误. C语言的灵活性带来了代码效 ...

  3. linux pclint配置_静态分析工具PC-lint Plus使用教程:安装与配置

    PC-lint Plus是一种静态分析工具,通过分析C和C ++源代码来发现软件中的缺陷.与编译器一样,PC-lint Plus会解析源代码文件,执行语义分析,并构建一个抽象语法树来表示程序.PC-l ...

  4. php 代码 自动检查工具下载,PHP_CodeSniffer安装和使用教程(自动代码检查规范工具)...

    在我们开发中都会讲究代码规范,若是个人开发者,代码规范与否,只要自己看得懂便可以了,但是在团队协作中,代码规定尤为重要,下面,我们介绍一款PHP_CodeSniffer,自动检查代码规范的工具. PH ...

  5. eslint 配置_前端代码规范配置 (一)

    ESLint ESLint 是一个开源的 Javascript 代码检测工具,通过将 js 代码解析成抽象语法树(AST),分析并给与代码质量(如一些方法的使用方式不对)和代码风格(缩进,引号等等)两 ...

  6. Linux网络配置——从自动获取IP地址转为固定IP地址

      众所周知,Linux中有两种获取ip的方式,那么自动获取IP地址和指定IP地址有什么区别和特点呢?为什么Linux程序员都需要使用固定IP地址呢? 如下所示: 两种获取方式的优缺点 1. 自动获取 ...

  7. linux清理缓存_自动清理linux系统内存和Cache方法

    1.手动清理内存和Cache方法 Linux下清理内存和Cache方法 /proc/sys/vm/drop_caches 频繁的文件访问会导致系统的Cache使用量大增 $ free -m total ...

  8. Linux centos7 配置用户自动登录

    1.编辑文件 [root@CentOS6 ~]# vim /etc/gdm/custom.conf GDM configuration storage [daemon] AutomaticLoginE ...

  9. linux万年历,万年历_十万代码进行时的技术博客_51CTO博客

    这是一个实现万年历的程序,我从书上copy到TC.exe上,再修改了多次依然未能完美的呈现万年历的效果.各位高手教教我吧~!注释部分纯属我个人的理解,还有我不理解之处. #include int Is ...

最新文章

  1. Node.js实现服务器端生成Excel文件(xls格式、xlsx格式文件)并弹出下载文件
  2. ios可变数组的操作
  3. Linux内核源码学习
  4. 至于你信不信,我反正是信了——以类为单位的编程思想
  5. Linux定时检测内存,若使用率超过指标,重启Tomcat并清空内存
  6. “未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序”的解决方案
  7. Go语言---并发编程goroutine
  8. 循环体中调用[NSString stringWithFormat:@%@,Object] 方法的内存问题
  9. WebView与js的交互
  10. 终于找到破坏(被锁)广联达云计价平台GCCP6.0工程文件的罪魁祸首,显示:您的工程可能受到盗版侵害……
  11. 想要定制个性化语音?来试试这几个配音软件
  12. CRC校验,用于大家参考和日后查阅,内容引用github,非本人创作。
  13. 一套比较完备的在ubuntu 18.04系统上部署nginx+postgresql+php的记录
  14. 电机原理及电机拖动实验系统
  15. Jmeter系列(68)- BeanShell 内置变量 prev
  16. 记录:macbook 下剪切快捷键
  17. tvOS游戏开发系列(SpriteKit)之准备工作(一)
  18. 必不可少的数学基础-单调有界定理
  19. 计算机专业英语2017课后答案,计算机专业英语考试试题及答案
  20. OpenGrok搭建方法

热门文章

  1. Git之先拉取再推送
  2. 大学所有专业都要学c语言吗,是不是大学里的所有专业都会学一些计算机基础内容...
  3. [色彩]迅速判断16进制颜色值呈色
  4. 自制简单的linux 系统
  5. notepad++比较两文件的不同
  6. homestead virtubox
  7. 在Premiere中使用变形稳定器要求剪辑尺寸与序列匹配
  8. 西南科技大学计算机网络实验四,西南科技大学计算机网络-实验三.pdf
  9. 兔子搬萝卜  猴子搬香蕉  算法实现
  10. android 拖动和缩放 [Dragging and Scaling]