静态代码分析工具(如 CppCheck)与将编译器警告设置为更严格的级别 [关闭]

Posted

技术标签:

【中文标题】静态代码分析工具(如 CppCheck)与将编译器警告设置为更严格的级别 [关闭]【英文标题】:Static Code Analysis tool (like CppCheck) versus Setting compiler warnings to a stricter level [closed] 【发布时间】:2018-04-20 17:23:29 【问题描述】:

[这是一个更普遍的问题,并且依赖于设置编译器选项和使用静态代码分析工具的经验。]

目前,我在编译期间使用 -Werror 将所有警告标记为错误。

我打算使用 c++ 的静态代码分析工具。首先,我将使用 CppCheck,它具有如下所列的功能:http://cppcheck.sourceforge.net/#features,如下所示:

死指针 除以零 整数溢出 位移位操作数无效 无效转化 STL 内存管理使用无效 空指针取消引用 越界检查 未初始化的变量 写入 const 数据

我的问题是,如果我解决了编译器标记的所有错误(通过 -Werror 检测到),那么 CppCheck 列出的所有这些问题(功能)不会在 build-deploy 的编译阶段得到覆盖工作流程?

更一般地说,将编译器选项设置为“最严格”级别(如在此答案中https://***.com/a/401276/712248)是否会标记 CppCheck 等静态分析工具可以检测到的所有问题(包括/排除误报)?那么,本质上,如果我使用最严格的编译器选项,那我就不需要使用静态分析工具了?

【问题讨论】:

快速回答是否定的。 许多监管机构除了编译器警告设置外,还推荐了不止一种静态分析工具。这就像邀请多个人进行代码检查一样;不同的人有不同的检查代码的方法。 【参考方案1】:

当然,这两者之间有很多重叠之处,但使用专用分析器预计会出现更多问题。真假阳性。静态分析器可以使用较慢的技术,并且通常只定期运行,就像发布之前一样,因为在大型代码库上它们可能有很长的运行时间。速度差异是我们拥有两个工具而不是一个的唯一真正原因。

【讨论】:

“但预计会有更多的问题”这是指在代码库中检测到的问题还是在使用分析工具时遇到的问题? 我的意思是希望报告更多问题,即代码中的潜在问题。正如我在回复中暗示的那样,通常静态分析工具会产生很多良性问题*误报”。编译器警告通常更严重,不太关心风格。但并非总是如此。

以上是关于静态代码分析工具(如 CppCheck)与将编译器警告设置为更严格的级别 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

cppcheck使用大全

静态分析工具Cppcheck在Windows上的使用

C++代码审查工具Cppcheck和TscanCode

寻找用于 Java 开发的类似 Cppcheck 的工具 [关闭]

如何使用 AST 树或其他工具进行静态代码逻辑分析?

如何为 C++ 代码使用 cppcheck 的内联抑制过滤器选项?