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

时间:2009-09-16 15:14:14

标签: java c++ c findbugs pmd

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

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

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

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

5 个答案:

答案 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)

我过去曾使用KlocworkRational 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 ......&更多)。

瑞克