有哪些开源的c++静态分析工具可用?

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

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

另一种选择是找到可以在多个平台(Windows和Unix)上运行的开源c++静态分析工具。通过使用开源工具,可以对其进行修改以适应特定的需求。找到这些工具并非易事。

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

有哪些其他可移植的开源c++静态分析工具是大家都知道的,可以推荐的?

一些相关链接。

103267 次浏览

夹板似乎满足了C的要求。

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

Mac OSX:

brew install splint

如果你所说的开源是指“免费”,那么微软的prefast分析是一个很好的分析。仅适用于windows的当然。它完全集成在Visual Studio &编译器。例如:

cl /analyze Sample.cpp

关于GNU编译器,gcc已经有一个内置选项,可以在-Wall的选项之外增加警告。选项是-Weffc + +,它是关于违反他的书“有效的和更有效的c++”中发表的斯科特•迈耶斯的一些指导方针。

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

  • 为动态分配内存的类定义复制构造函数和赋值操作符。
  • 在构造函数中首选初始化而不是赋值。
  • 在基类中将析构函数设为虚函数。
  • 让"operator="返回对*this的引用。
  • 当必须返回对象时,不要尝试返回引用。
  • 区分递增和递减操作符的前缀和后缀形式。
  • 不要让“&&”,“||”或“,”过载。

目前还在开发中,但铿锵声做C分析,目标是随着时间的推移处理c++。它是LLVM项目的一部分。

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

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

编译器选项:-fsyntax-only

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

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

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

CppCheck是开源和跨平台的。

Mac OSX:

brew install cppcheck

您应该尝试一下oo-browser,它与xemacs有很好的集成

微软的PREFast也可以在Windows驱动程序工具包中使用。7.0版本可下载在这里

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

你也可以在融化(一种为扩展GCC而设计的领域特定语言)中编写GCC扩展代码,或者在C中编写GCC插件(更难)来进行一些自定义分析。

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

我们一直在开发一个名为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跳棋。分析结果可以在单独的视图中查看。每一个 Metric具有可配置的属性(例如,“每个代码最多行数”的阈值 函数”)。超过这些阈值将报告一个问题并创建一个标记

.在源代码编辑器中

使用计量仪,您可以:

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

目前metriculator附带以下指标:

  • 麦凯布(圈复杂度)
  • 每个类型的传出耦合
  • 逻辑源代码行
  • 每种类型的成员数量
  • 每个函数的参数个数

有人提到了- weffc++,但这实际上是我在默认情况下没有打开的唯一GCC警告之一。但是,我所打开的警告集是我的工具包中最重要的静态分析工具。你可以看到建议警告的完整列表

总而言之:

-pedantic -Wall -Wextra -Wcast-align -Wcast-qual - wctor - dr -privacy -Wdisabled-optimization -Wformat=2 -Winit-self - wlogic -op - wloss -declarations - wloss -include-dirs -Wnoexcept - wd -style-cast - woverload -virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow=5 -Wswitch-default - wdef -Werror -Wno-unused

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