什么开源的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了有用的东西来看看。