cppchecker简单介绍和原理初窥


1. 概述:
c/c++代码静态分析工具,用于检查编译器难以觉察的bug,其设计目标是没有漏报

2. 准确率:
不能包治百病,但配合testing、instrumenting,可以极大减少bug

3. 检查内容:
  • 64位兼容性
  • 自动变量生存周期检查
  • 数组越界检查
  • 类检查,包括缺少构造函数,变量在构造函数中是否初始化及其初始化顺序,基类析构函数是否为虚函数等
  • 异常安全检查
  • IO检查:sprintf、scanf是否检点,使用close了的文件,向只读文件中写数据,对输入流使用fflush等
  • 自动变量内存泄露:检查自动变量被分配但没有被释放
  • 内存泄露:申请的内存地址传递错误,构造器中分配的内存必须在析构器中释放,struct成员指向某个内存时候释放struct也必须释放成员指向的内存
  • 不可重入函数(strtok等)使用警告、废弃函数(bcopy等)使用警告
  • 空指针引用
  其它检查:
  • bool转指针
  • 除零
  • 引用对象提前被析构
  • assert语句内的赋值
  • double free
  • 冗余拷贝const
  • 不兼容指针类型的转换
  • 重复的if
  • 总为真、假的条件
  • sizeof内的计算
  • 自赋值
  • 不可达的死代码
  • etc


设计文档:


cppchecker是一个静态检查工具,并且没有对代码流进行分析,假设所有代码都是可达的,if()的分隔作用被无视。因此,一些难找的bug会被发现,一些本不是bug的内容也可能会给warning,不必惊慌。
if (myvar == NULL)
{
     WARN("wrong");
}
myvar->hello();
myvar可能为NULL会被检测到。
OceanBase用cppchecker跑了一遍,这种NULL的引用基本都被检测到了。cppchecker is a quick learner.









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值