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
设计文档:
http://jaist.dl.sourceforge.net/project/cppcheck/Articles/cppcheck-design.pdf
cppchecker是一个静态检查工具,并且没有对代码流进行分析,假设所有代码都是可达的,if()的分隔作用被无视。因此,一些难找的bug会被发现,一些本不是bug的内容也可能会给warning,不必惊慌。
if (myvar == NULL)
{
WARN("wrong");
}
myvar->hello();
myvar可能为NULL会被检测到。
OceanBase用cppchecker跑了一遍,这种NULL的引用基本都被检测到了。cppchecker is a quick learner.
标签:检查,内存,简单,myvar,原理,cppchecker,NULL,bug From: https://blog.51cto.com/maray/6510877