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