最近我被问及Coverity Prevent的替代方案,以获得包含C / C ++和Java的代码库。显然,在Java方面,可用的免费工具包括Findbugs(编译代码分析)和PMD(静态代码分析)。它们非常强大,特别是当您开始研究与IDE的集成时(再次,它是免费的)。
然而,当您开始使用各种编译器,体系结构等进入C / C ++领域时,事情会很糟糕。
我已经为Java方面提出了各种工具,包括Findbugs和PMD。当我考虑使用以下指标时,我正在寻找的是C / C ++方面的最佳选择:
最终的工具将是Findbugs和具有相同功能集的PMD的组合,并且每个座位的零美元都是有用和可用的。
答案 0 :(得分:3)
我想到的两个是C Splint和C ++ Cppcheck。
如果您想寻找更多选项,这些工具的这个功能就是“静态代码分析”。这可能会帮助您找到更多用于C和/或C ++的工具。此外,您可能对问题"What open source C++ static analysis tools are available?"
的答案感兴趣答案 1 :(得分:3)
C ++是一种足够复杂的语言,它的工具(例如重构或静态分析工具)不如Java或C#好。
Gimpel Software的PC-lint是我所知道的最接近C ++标准错误检查工具的东西。它具有合理的定价模式。我不知道它与其他工具的整合程度如何。
Clang开源项目最终应该可以完成您想要的大部分工作(看起来真的很酷),但它仍处于开发阶段。
答案 2 :(得分:3)
PC-Lint是要走的路。与大多数其他工具不同,它具有完整的功能间和模块间值跟踪,并支持模板编译/解析的所有毛边。大约9年前,我为自己买了一份个人副本,只是因为它太便宜了。我最终在开源项目中使用了很多。 PC-Lint没有基于LOC的许可证,它没有打电话回家,也没有许可证服务器。它非常关注荣誉系统而且非常严肃。在过去的9年中,我发现了一些问题(而且这些问题很少见),但它们几乎总是在几周内得到解决。
开源方面,有基于Coverity的元编译分析技术的SMatch,该葡萄酒项目使用非常重要,效果很好。 PMD的cpd(复制粘贴检测器)子工具适用于C ++,并且非常快。对于圈复杂度,可以通过apt-get轻松安装pmccabe(在Linux上;在Windows上,我在cygwin下编译源码)。
PC-Lint确实需要一些配置才能让它运行良好,最多一两天。其他工具不能很好地工作,所以你可以用“find。-name .c | xargs pmccabe | sort -n | tail -n 20”这样的命令开始运行。 / p>
答案 3 :(得分:0)
我过去曾使用Klocwork和Rational Software Analyzer,虽然两者都是商业/非免费的,但效果都很好。
答案 4 :(得分:0)
我使用flawfinder.py在C / C ++中扫描160个危险函数。 http://www.dwheeler.com/flawfinder/
如果你想要一个基于flawfinder的ruby端口,你可以使用vulnxpose.rb。 https://github.com/nanotechz9l/Source-code-analyzer
这两个工具都扫描C / C ++源代码文件中的已知漏洞,包括缓冲区溢出,竞争条件,弱加密,chroot jail configs ......&更多)。
瑞克