是否有C / C ++的Findbugs和/或PMD等价物?

我最近被问及Coverity Prevent的替代品,它包含了包含C / C ++和Java的代码库。 显然,在Java方面,可用的免费工具包括Findbugs(编译代码分析)和PMD(静态代码分析)。 它们非常强大,特别是当您开始研究与IDE的集成时(同样,它是免费的)。

但是,当您开始使用各种编译器,体系结构等进入C / C ++领域时,事情会很糟糕。

我已经为Java方面提出了各种工具,包括Findbugs和PMD。 当我考虑使用以下指标时,我正在寻找的是C / C ++方面的最佳选择:

  1. 价格:免费更好,但可以通过更好的价值打败。 但是,每行代码收费的定价模型令人恐惧。
  2. function集:这个工具如何让我的生活更美好? 在我检查错误之前,在我们发送代码之前,它会以什么方式检测我的错误等?
  3. 可用性:我可以在办公桌上使用该工具吗? 我可以分享报告和/或调查结果吗? 我可以将该工具与Fogbugz(我们在我的小组中使用)集成吗? 我可以将该工具集成到CruiseControl(或同等产品)中吗?

终极工具将是Findbugs和PMD具有相同function集的组合,并且每个座位的零美元都是有用和可用的。

想到的两个是Splint for C和Cppcheck for C ++。

如果您想寻找更多选项,这些工具的这个function就是“静态代码分析”。 这可能会帮助您找到更多用于C和/或C ++的工具。 此外,您可能对“有哪些开源C ++静态分析工具可用?”这一问题的答案感兴趣。

C ++是一种足够复杂的语言,它的工具(例如重构或静态分析工具)不如Java或C#好。

Gimpel Software的PC-lint是我所知道的最接近C ++标准错误检查工具的东西。 它具有合理的定价模式。 我不知道它与其他工具的集成程度如何。

Clang开源项目最终应该可以完成您想要的大部分工作(看起来非常酷),但它仍处于开发阶段。

PC-Lint是要走的路。 与大多数其他工具不同,它具有完整的function间和模块间值跟踪,并支持模板编译/解析的所有毛边。 大约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”这样的命令运行。

我过去使用过Klocwork和Rational Software Analyzer ,虽然它们都是商业/非免费的,但它们都运行良好。

我使用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配置……等等。

干草堆