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

时间:2020-03-06 14:48:12  来源:igfitidea点击:

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

商业C ++静态分析产品可从供应商Klocwork,Gimpel和Coverity获得。此外,还有鲜为人知的PVS-Studio分析仪。尽管拥有这样的产品很棒,但是对学生来说成本太高了,通常很难获得试用版。

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

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

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

还有哪些其他便携式移植开源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/
  • 选择静态代码分析工具

解决方案

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

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

Mac OSX:

brew install splint

如果通过开源,我们真正的意思是"免费",那么Microsoft的快速分析是一个很好的分析。当然只有Windows。它完全集成在Visual Studio和编译器中。例如。:

cl /分析Sample.cpp

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

关于GNU编译器,gcc已经有一个内置选项,可以对-Wall发出警告。选项是-Weffc ++,它违反了Scott Meyers在他的著作《有效和更有效的C ++》中发布的某些准则。

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

  • 为具有动态分配的内存的类定义一个复制构造函数和一个赋值运算符。
  • 在构造函数中,初始化优先于赋值。
  • 在基类中使析构函数虚拟化。
  • 让" operator ="返回对* this的引用。
  • 当我们必须返回对象时,请勿尝试返回引用。
  • 区分增量和减量运算符的前缀和后缀形式。
  • 切勿重载" &&"," ||"或者","。

目前正在开发中,但是clang可以进行C分析,并且可以随时处理C ++。它是LLVM项目的一部分。

更新:虽然登录页面显示"分析器是一个连续的在进行中",但现在它已被记录为C和C ++的静态分析器。

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

编译器选项:-fsyntax-only

Oink是在Elsa C ++前端之上构建的工具。 Mozilla的猪肉是Elsa / Oink的叉子。

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

Doxygen进行一些控制流分析并生成图形。这些可能不是我们想要的,但是我觉得它们很有用。

CppCheck是开源和跨平台的。

Mac OSX:

brew install cppcheck

我们应该尝试oo-browser,它与xemacs集成得非常好

Windows驱动程序工具包中也提供了Microsoft的PREFast。 7.0版可在此处下载。

Microsoft文档指出,只能在驱动程序代码上运行它,但是此(旧的)博客文章列出了运行它的步骤。也许可以将其集成到正常的构建过程中?