发布 cppcheck 2.6,C++ 和 C 语言的静态代码分析器

静态代码分析器 cppcheck 2.6 的新版本已发布,它允许您识别 C 和 C++ 语言代码中的各种类型的错误,包括使用非标准语法(嵌入式系统典型的语法)时的错误。 提供了一系列插件,通过它们可以将cppcheck与各种开发、持续集成和测试系统集成,并提供检查代码是否符合代码风格等功能。 要解析代码,您可以使用自己的解析器或 Clang 的外部解析器。 它还包括 donate-cpu.py 脚本,以提供本地资源来对 Debian 软件包进行协作代码审查工作。 该项目的源代码根据 GPLv3 许可证分发。

cppcheck 的开发重点是识别与未定义行为相关的问题以及从安全角度来看危险的设计的使用。 目标还在于最大限度地减少误报。 已识别的问题包括:指向不存在对象的指针、除以零、整数溢出、不正确的位移操作、不正确的转换、使用内存时出现的问题、STL 的不正确使用、空指针取消引用、实际访问后使用检查到缓冲区、缓冲区溢出、使用未初始化的变量。

在新版本中:

  • 分析器核心中添加了以下检查:
    • 函数体中缺少返回运算符;
    • 记录重叠数据,确定未定义的行为;
    • 正在比较的值超出了类型的值表示形式;
    • 复制优化不适用于 return std::move(local);
    • 不能同时打开文件在不同的流(stream)中进行读写;
  • 对于 Unix 平台,增加了对以不同颜色显示诊断消息的支持;
  • 添加了 ValueFlow 的符号分析。 在计算两个未知变量之间的差异时使用简单的delta;
  • 用于标记列表“define”的规则也可以匹配#include;
  • 库标签现在可以包含一个标签,以及相应的自由函数,它可以接受诸如 std::size、std::empty、std::begin、std::end 等容器。 可以指定连接器的产量或动作;
  • 库标签现在可以包含一个标签对于具有唯一所有权的智能指针。 现在发出有关对这些类型的智能指针的悬空引用的警告;
  • 修复了处理 —cppcheck-build-dir 参数的问题;
  • htmlreport 现在可以显示有关作者的信息(使用 gitblame);
  • 关于不是常量但可能是常量的变量的扩展警告;
  • 分析仪累积的错误和缺点已得到纠正。

此外,Misra C 2012 的检查,包括修正案 1 和修正案 2,已全面实施,但规则 1.1、1.2 和 17.3 除外。 检查 1.1 和 1.2 必须由编译器执行。 验证17.3可以由GCC等编译器执行。

来源: opennet.ru

添加评论