Cppcheck是一个针对C/C++代码缺陷的静态检查工具。与C/C++编译器和其他分析工具不同,Cppcheck只检查编译器无法检测到的bug,不检查语法错误。我们的目标是仅检测代码中的实际错误(即误报为零)。
Cppcheck是一个静态分析工具对C/ C ++代码。
C/ C ++编译器和很多其他分析工具,它不检测代码中的语法错误。
Cppcheck主要检测的漏洞,该编译器通常不检测的类型。
我们的目标是(具有零误报即),以检测只实际中的错误代码。
检测各种错误在你的代码。
- 出界检查
- 内存泄漏检测
- 检测可能的空指针废除
- 检查未初始化变量
- 检查STL的无效使用
- 检查异常安全
- 如果过时或不安全的功能是用来警告
- 警告没有使用的或多余的代码
- 检测各种可疑的指示代码中的bug
测试
- 选择一个项目并测试它的源与最新版本。写门票TRAC你从Cppcheck发现的问题。
发展
- 选择从Trac的车票,编写测试用例为它(和写评论测试用例已创建的车票)。
或者选择一个测试用例失败,并试图修复它。
打个补丁,并提交给Trac的内联如果是小,或者将其固定为一个文件。
市场营销
- 写文章,评论或告诉你的朋友们。
用户越多,我们有,更多的人,我们有测试和更好的,我们能成。
设计
- 创造新的良好的检查和创建门票TRAC他们。
积分
- 编写一个插件,你最喜欢的IDE或您的发行或操作系统创建一个包。
技术撰稿人
- 写出我们发现错误更好的文档。目前,只有少数的错误有任何文件都没有。
1. 自动变量
指针变量是唯一有效的,只要该变量是在范围内。
2. 检查:
- 返回指针自动或临时变量
- 分配一个变量的地址给一个函数的一个有效的参数
- 返回引用本地/临时变量
- 返回函数参数的地址
- 指针参数可疑分配
- 功能参数无用分配
3. 布尔
布尔类型检查
- 使用增量布尔
- 一个布尔值与非零整数比较
- 布尔表达式的一个整数比0或1的比较
- 一个功能比较使用关系运算符返回布尔值
- 与布尔值使用关系运算符的布尔值比较
- 使用布尔按位中表达
- 指针加法的条件(无论是间接引用被忘记或指针溢出才能使病情假)
- 分配布尔值指针或浮动
4. 升压用法
检查升压无效用法:
- BOOST_FOREACH在集装箱改装
5. 边界检查
出界检查:
- 数组索引出界检测通过价值流分析
- 危险strncat函数的使用()
- 通过为尺寸字符常量的功能就像memset的()
- 的strncpy()离开字符串未终止
- 访问数组负折射率
- 主(的argv,argc个)参数不安全使用
- 访问数组索引变量检查其值之前
- 检查足够大的数组被传递给函数
- 分配内存以负尺寸
6. 类
检查每个类的代码。
- 缺少构造函数和拷贝构造函数
- 构造函数应该是明确的
- 通过构造函数初始化所有的变量?
- 是否分配的所有变量通过运算符='?
- 时发出警告memset的,的memcpy等都是在一个类中使用
- 如果内存类的分配使用malloc警告()
- 如果它是一个基类,检查的析构函数是虚拟的
- 是否有未使用的私有函数?
- “运算符='应该返回引用自
- “运算符='应检查分配给自
- 常量性的成员函数
- 顺序初始化的
- 推荐的初始化列表的使用
- 一个构件的与自身初始化
- 从“这个”可疑的减法
- 在构造函数调用纯虚函数/析构函数
- 重复的继承的数据成员
7. 条件
配合分配和其他条件的条件:
- 不匹配的分配和比较=>比较总是真/假
- 不匹配的LHS和RHS比较=>比较总是真/假
- 检测的使用|其中&应该使用
- 检测“如果”匹配与“否则,如果”条件
- 失配BITAND(一个&= 0XF0;一个与= 1; =>α= 0)
- 发现死代码是不可访问,由于反条件检查嵌套if语句
- 条件,始终是真/假
- 互斥超过||总为真
- 模结果总是为真/假的比较。
- 已知的变量值=>条件始终为真/假
8. 异常安全
检查异常安全
- 在析构函数抛出异常
- 在无效状态引发异常
- 投掷捕获异常的副本,而不是重新抛出原始异常
- 捕获到异常按值而不是按引用
- 在noexcept抛出异常,不抛出异常(),属性((抛出异常))或__declspec(不抛出)函数
- 未处理的异常规范时,调用函数foo()
9. IO使用格式字符串
检查格式字符串输入/输出操作。
- 功能“的sprintf”的不良的使用(重叠的数据)
- 在“scanf的”格式字符串缺失或错误宽度说明
- 使用已关闭的文件
- 文件输入/输出,无需定位结果未定义的行为
- 阅读到只被打开写文件(反之亦然)
- 对文件操作重新定位以追加模式打开
- 对输入流使用fflush()
- 输出流的无效使用。例如:“性病::法院<<性病::法院;”
- 错误一些给'printf的“或参数”scanf函数;“