305

Java 有一些非常好的开源静态分析工具,例如FindBugsCheckstylePMD。这些工具易于使用,非常有用,可在多个操作系统上运行并且免费

提供商业 C++ 静态分析产品。虽然拥有这样的产品很棒,但对于学生来说成本太高了,而且通常很难获得试用版。

另一种方法是找到可以在多个平台(Windows 和 Unix)上运行的开源 C++ 静态分析工具。通过使用开源工具,可以对其进行修改以满足某些需求。找到这些工具并非易事。

以下是其他人发现或建议的 C++ 静态分析工具的简短列表。

还有哪些其他任何人都知道并可以推荐的便携式开源 C++ 静态分析工具?

一些相关链接。

4

14 回答 14

74

CppCheck是开源和跨平台的。

Mac OSX:

brew install cppcheck
于 2009-05-08T23:27:25.420 回答
54

关于 GNU 编译器,gcc 已经有一个内置选项,可以对 -Wall的选项提供额外的警告。选项是-Weffc++,它是关于违反Scott Meyers在他的书“ Effective and More Effective C++ ”中发表的一些指导方针。

特别是该选项检测以下项目:

  • 为具有动态分配内存的类定义复制构造函数和赋值运算符。
  • 更喜欢在构造函数中进行初始化而不是赋值。
  • 在基类中使析构函数为虚拟。
  • 让 "operator=" 返回对 *this 的引用。
  • 当你必须返回一个对象时,不要试图返回一个引用。
  • 区分递增和递减运算符的前缀和后缀形式。
  • 切勿重载“&&”、“||”或“,”。
于 2008-09-27T20:24:38.280 回答
29

目前正在开发中,但clang会进行 C 分析,并且目标是随着时间的推移处理 C++。它是LLVM项目的一部分。

更新:虽然登陆页面上写着“分析器是一个持续进行中的工作”,但它现在被记录为 C 和 C++ 的静态分析器。

问题:如何运行 GCC/Clang 进行静态分析?(仅警告)

编译器选项:-fsyntax-only

于 2008-09-29T02:06:17.857 回答
21

Oink 是一个建立在 Elsa C++ 前端之上的工具。Mozilla 的 Pork 是 Elsa/Oink 的一个分支。

见:http ://danielwilkerson.com/oink/index.html

于 2008-11-12T22:04:12.717 回答
17

其他人提到了 -Weffc++,但这实际上是我默认不打开的唯一 GCC 警告之一。但是,我打开的一组警告是我工具包中最重要的静态分析工具。您可以查看推荐警告的完整列表

总之:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual -Wctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wlogical-op -Wmissing-declarations -Wmissing-include-dirs -Wnoexcept -Wold -style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default -Wundef -Werror -Wno-unused

请注意,其中一些需要新版本的 gcc,因此如果您卡在 4.5 或其他版本上,您可能需要从列表中删除它们。

于 2012-07-01T16:53:28.583 回答
14

John Carmack 还在这篇关于“静态代码分析”的有趣博文中提到了PVS-Studio

于 2012-01-22T15:23:00.130 回答
7

如果通过开源,你真的是指“免费”,那么微软的prefast分析是一个很好的分析。当然,仅限 Windows。它完全集成在 Visual Studio 和编译器中。例如:

cl /analyze Sample.cpp
于 2008-09-27T07:59:33.580 回答
6

Mozilla 的静态分析工作大概值得一看。

于 2008-09-27T08:24:30.227 回答
4

夹板似乎填补了 C 的账单。

如果您没有指定开源,我会说Gimpel SoftwarePCLint可能是 C++ 中用于静态代码检查的最佳工具之一。但是,当然,它不是开源的。

Mac OSX:

brew install splint
于 2008-09-26T19:52:56.727 回答
3

Microsoft 的PREFast也可在 Windows Driver Kit 中使用。7.0 版可在此处下载。

Microsoft 文档声明它应该只针对驱动程序代码运行,但这篇(旧)博客文章列出了运行它的步骤。也许它可以集成到正常的构建过程中?

于 2010-01-19T20:18:32.077 回答
2

我们一直在开发一个名为 metriculator 的 Eclipse CDT 插件。它仍在开发中,但一些主要指标(例如 LSLOC、McCabe、EfferentCoupling)已经实现。

有关视频演示和文档等更多详细信息,请参见http://sinv-56013.edu.hsr.ch/redmine/projects/metricular/wiki/Documentation

最新的夜间版本可通过更新站点安装:http ://sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

进一步说明

Metriculator 静态分析 C++ 源代码并生成软件指标。指标被实现为 Codan 检查器。可以在单独的视图中探索分析结果。每个指标都有可配置的属性(例如,“每个函数的最大代码行数”的阈值)。超过这些阈值将报告问题并在源代码编辑器中创建标记。

使用度量器,您可以:

  • 分析 C++ 文件/文件夹/项目
  • 使用 Codans 首选项页面定义指标阈值并启用/禁用指标
  • 在源代码编辑器中有问题标记
  • 探索指标结果
  • 将指标结果导出为标签云(通过更新站点作为可选功能提供)

目前 metriculator 带有以下指标:

  • McCabe(圈复杂度)
  • 每种类型的传出耦合
  • 逻辑源代码行
  • 每种类型的成员数
  • 每个函数的参数数量
于 2012-04-19T08:18:54.650 回答
1

你应该试试 oo-browser 它与 xemacs 的集成很棒

于 2009-05-09T16:55:02.157 回答
1

还可以使用MELT(一种为扩展 GCC 而设计的领域特定语言)或 C 中的 GCC 插件(更难)对 GCC 的扩展进行编码,以进行一些自定义分析。

于 2011-11-09T21:33:13.157 回答
0

Doxygen 进行一些控制流分析并生成图表。这些可能不是你要找的,但我发现它们很有用。

于 2008-11-12T22:24:25.640 回答