这些工具之间有根本区别吗?毕竟,klocwork相对昂贵,而其他的是免费的吗?两者都遵循一些规则进行静态代码分析。
规则质量是否存在差异?它仅取决于规则吗?你有什么经验?
答案 0 :(得分:2)
无论是在检查程序的深度上还是在缺陷跟踪和假阳性抑制方面,您都可以得到所需的回报。 cppcheck和Clang静态分析器值得运行,即使在良好的代码库中,也可以找到相当数量的浅薄但严重的错误。 (我们首先运行Clang分析器,在https://github.com/jonreid/XcodeWarnings的帮助下将设置文件调到最大。cppcheck偶尔会发现它遗漏的一些错误,但字符相似。)
Klocwork及其竞争对手Coverity都在C / C ++中发现了更深的错误,有时在其分析深度上令人吃惊。但是,在过去的十年中,Coverity已被接管,并且在C / C ++检查器中进展甚微。但它们仍然值得运行。 (他们的JVM检查器不是。)我最近没有使用过Klocwork,但它们也不再独立。 (有关更多详细信息,请参阅我的Dobbs博士的文章,http://www.drdobbs.com/testing/deploying-static-analysis/240003801)
(pablo285,Klocwork和Coverity都有文档齐全的API,可让您编写自己的检查器。)
答案 1 :(得分:1)
LLVM有一个称为Clang static analyzer的静态分析工具。
Clang静态分析器和cppcheck是开源的(允许您编写自己的检查/修改现有检查),而klockwork是专有的(具有用于编写自己的检查的API)。
至于检查的质量-您必须自己尝试,我试图根据事实而非观点来回答这个问题。但是,没有什么可以阻止您使用多个静态分析工具。
Clang-tidy稍有不同,它称自己为“线性”工具,尽管它可以用于静态分析,但它还为发现的某些缺陷提供了自动修复程序。内部clang-tidy使用抽象语法树表示您的代码。为了构建此AST,代码必须可由clang编译,这在某些代码库中可能是(可能是主要的)缺点。
有关提供自动修复程序的整洁检查列表,请参见this answer。
答案 2 :(得分:0)
我相信clang-tidy或cppcheck引擎会逐行进行分析。 Klocwork引擎则进行程序间分析。 Klocwork可以检测文件相关的问题以及大多数其他工具无法检测到的问题。 Klocwork在发现关键检测(例如内存泄漏,缓冲区溢出,NULL异常,死锁,并发问题等)方面非常强大。
我们评估了多个静态代码分析器,并以Klocwork结尾。
我会告诉您为什么我们选择Klocwork而不是其他任何SCA工具,
我想说,对Klocwork进行免费评估并在您的项目中对其进行测试。我相信你会喜欢的。
答案 3 :(得分:0)
是的,clang-tidy或cppcheck与klocwork之间存在根本的区别。
Klocwork包装器将监视您的构建并根据您的编译器名称构建设置(包括定制的系统调用)创建构建规范文件。使用此构建规范文件Klocwork进行过程间分析,并在后端创建抽象语法3。那么它将尝试覆盖100%的代码和100%的路径。这样Klocwork分析将更加准确,并且可以检测代码中的实际缺陷。
Klocwork也可以检测数据流问题。