什么开源的C ++静态分析工具可用?

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

商业C ++静态分析产品可从供应商Klocwork , Gimpel和Coverity获得 。 还有一些不太知名的PVS-Studio分析仪。 虽然这样的产品很棒,但对于学生来说成本太高了,通常很难拿到试用版本。

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

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

  • C ++检查http://sf.net/projects/cppcheck/
  • Oink http://danielwilkerson.com/oink/index.html
  • C和C ++代码计数器http://sourceforge.net/projects/cccc/
  • Splint(来自答案)
  • Mozilla的猪肉(从答案)(这是现在的一部分Oink)
  • Mozilla的Dehydra(来自答案)
  • 使用选项-Weffc++ for GNU g ++(来自答案)

什么是任何人都知道,可以推荐的其他便携式开源C ++静态分析工具?

一些相关的链接。

  • Windows上的C ++静态代码分析工具
  • http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
  • http://www.chris-lott.org/resources/cmetrics/
  • 根据一组编码标准检查C / C ++源代码的免费工具?
  • http://spinroot.com/static/
  • select一个静态代码分析工具

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

请参阅: http : //danielwilkerson.com/oink/index.html

CppCheck是开源和跨平台的。

Mac OSX:

 brew install cppcheck 

关于GNU编译器,gcc已经有一个内置的选项,可以对-Wall的那些进行额外的警告 。 选项是-Weffc ++ ,这是关于Scott Meyers在他的书“ Effective and More Effective C ++ ”中出版的一些指南的违规。

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

  • 为具有dynamic分配内存的类定义复制构造函数和赋值运算符。
  • build议在构造函数中初始化赋值。
  • 使基类中的析构函数成为虚拟的。
  • 有“运算符=”返回* this的引用。
  • 当你必须返回一个对象时,不要试图返回一个引用。
  • 区分增量和减量运算符的前缀和后缀forms。
  • 切勿超载“&&”,“||”或“,”。

现在正在开发中,但是铿锵的 C分析和针对性的处理C ++随着时间的推移。 这是LLVM项目的一部分。

更新 :尽pipe登陆页面显示“分析器是一个持续的工作正在进行中”,但现在它已被logging为C和C ++的静态分析器。

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

编译器选项:-fsyntax-only

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

综上所述:

-Want -Want -Wextra -Wcast-align -Wcast-qual -Wower-dtor-privacy -Wdisabled-optimization -Wformat = 2 -Winit-self -Wiki-op -Wmissing-declaration-Wmissing- include-dirs -Wnoexcept -Wold -Wndundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-null-sentinel -Wstrict-overflow = 5 -Wswitch-default -Wundef -Werror -Wno-unused

请注意,其中一些需要一个新版本的gcc,所以如果你遇到4.5或其他问题,你可能需要从列表中删除它们。

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

如果通过开放源代码,你真的意味着“自由”,那么微软的prefast分析是一个很好的分析。 仅限于Windows。 它完全集成在Visual Studio和编译器中。 例如:

cl /分析Sample.cpp

Mozilla的静态分析工作可能值得一看。

斯普林特似乎填补了C的法案。

如果你没有指定开源的话,我会说Gimpel Software的PCLint可能是用C ++进行静态代码检查的最佳工具之一。 但是,当然,这不是开源的。

Mac OSX:

 brew install splint 

微软的PREFast也可以在Windows Driver Kit中find。 7.0版可以在这里下载。

微软文档声明,它应该只针对驱动程序代码运行,但这(旧) 博客文章奠定了运行它的步骤。 也许它可以被整合到一个正常的构build过程中?

我们一直在研究称为度量器的Eclipse CDT插件。 它仍在开发中,但一些主要指标(如LSLOC,McCabe,EfferentCoupling)已经实施。

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

最新的每晚构build可通过更新站点安装: http : //sinv-56013.edu.hsr.ch/metriculator/updatesite-nightly/site/

进一步描述

度量工具静态分析C ++源代码并生成软件度量标准。 度量标准实施为Codan检查器。 分析结果可以单独查看。 每个度量都具有可configuration的属性(例如,“每个函数的最大代码行数”阈值)。 超过这些阈值将报告一个问题,并在源代码编辑器中创build一个标记。

与计量器你可以:

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

目前,度量标准具有以下指标:

  • McCabe(Cyclomatic Complexity)
  • 每种types的传出耦合
  • 逻辑源代码行
  • 每种types的会员数量
  • 每个函数的参数数目

你应该尝试使用oo-browser,它与xemacs有着惊人的整合

也可以在MELT (用于扩展GCC的领域特定语言)或GCC插件(更难)中对GCC进行扩展编码以进行一些定制分析。

Doxygen进行一些控制stream分析并生成图表。 这些可能不是你要找的东西,但我已经find了有用的东西来看看。