19

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

但是,当您开始使用各种编译器、体系结构等进入 C/C++ 领域时,事情就变得很冒险了。

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

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

最终的工具将是像 Findbugs 和 PMD 的组合一样有用和可用的东西,具有相同的功能集,每个座位都是零美元。

4

5 回答 5

4

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

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

于 2009-09-16T15:16:24.793 回答
3

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

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

Clang开源项目最终应该能够做很多你想做的事情(而且看起来很酷,但它仍在开发中。

于 2009-09-16T15:22:29.730 回答
3

PC-Lint 是要走的路。与大多数其他工具不同,它具有完整的功能间和模块间值跟踪,并支持模板编译/解析的所有毛茸茸的边缘。大约 9 年前,我为自己买了一本个人副本,只是因为它太便宜了。我最终在开源项目中大量使用它。PC-Lint 不基于 LOC 进行许可,它不打电话回家,也没有许可服务器。这在荣誉系统上非常重要,而且非常严肃。9 年来,我发现了其中的一些问题(而且这些问题很少而且相差甚远),但它们几乎总是在几周内得到解决。

开源方面,SMatch 基于 Coverity 的元编译分析技术,wine 项目大量使用该技术,效果非常好。PMD 的 cpd(复制粘贴检测器)子工具适用于 C++,而且速度非常快。对于圈复杂度,有 pmccabe 可以通过 apt-get 轻松安装(在 Linux 上;在 Windows 上,我在 cygwin 下编译源代码)。

PC-Lint 确实需要一些配置才能使其正常工作,最多一两天。其他工具没有那么深入,因此您可以使用“find .- name .c | xargs pmccabe | sort -n | tail -n 20”之类的命令开始运行

于 2009-12-01T21:38:45.043 回答
0

我过去使用过KlocworkRational Software Analyzer,它们都运行良好,尽管它们都是商业/非免费的。

于 2009-09-16T15:32:09.650 回答
0

我使用ffectfinder.py 扫描C/C++ 中的160 个危险函数。 http://www.dwheeler.com/flawfinder/

如果你想要一个基于漏洞发现者的 ruby​​ 端口,那么你可以使用 vulnxpose.rb。 https://github.com/nanotechz9l/Source-code-analyzer

这两种工具都会扫描 C/C++ 源代码文件中的已知漏洞,包括缓冲区溢出、竞争条件、弱加密、chroot 监狱配置……等等)。

瑞克

于 2013-10-04T22:33:28.790 回答