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

jna*_*eta 298 c++ static-analysis coding-style

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

可以使用商业C++静态分析产品.虽然拥有这样的产品很棒,但是学生的成本太高,而且通常很难获得试用版.

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

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

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

一些相关链接.

Soo*_*Tan 74

CppCheck是开源和跨平台的.

Mac OSX:

brew install cppcheck
Run Code Online (Sandbox Code Playgroud)

  • 在 Windows 上:`choco install cppcheck` (2认同)

Nic*_*lli 53

关于GNU编译器,gcc已经有一个内置选项,可以为-Wall的那些启用额外的警告.选项是-Weffc ++,它是关于违反Scott Meyers在他的书" 有效和更有效的C++ "中发表的一些指导原则.

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

  • 为具有动态分配的内存的类定义复制构造函数和赋值运算符.
  • 首选初始化为构造函数中的赋值.
  • 在基类中使析构函数虚拟化.
  • 让"operator ="返回对*this的引用.
  • 必须返回对象时,请勿尝试返回引用.
  • 区分增量和减量运算符的前缀和后缀形式.
  • 永远不要超载"&&","||"或",".

  • 哎呀,`-Weffc ++`警告大约*吨*的构造在大型代码库中完美无缺.我赞成了`-Wextra`的建议; 没有它就不要离开家! (22认同)
  • 除了gcc的-Wall和-Weffc ++之外,-Wextra还做了一些很好的自由静态分析,例如,不返回值的分支,或者检查unsigned是否小于零.值得注意的是,专业程序员经常认为后者是个好主意... (7认同)

Don*_*eld 29

目前正在开发中,但clang做了C分析,并且随着时间的推移有针对性地处理C++.它是LLVM项目的一部分.

更新:当着陆页显示"分析仪是一个持续的工作进行中"时,它现在被记录为C和C++的静态分析器.

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

编译器选项:-fsyntax-only


小智 21

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

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

  • 我这辈子编译了 1000+ 个程序,但看在上帝的份上,我无论如何都编译不完这个包。我尝试使用 Fedora、Ubuntu、WSL、Cygwin、MSYS2、Windows - 但没有。总是缺少一些东西,文档简直太糟糕了。不要误会我的意思,我想这个工具很棒。但是网站和文档看起来在 10 到 15 年内没有人接触过它们。 (2认同)

Dav*_*one 16

其他人提到了-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或其他内容,则可能需要从列表中删除它们.


Luc*_*mon 14

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

  • 它既不是"开源",也不是那个词的任何意义上的"自由".它是众所周知的静态分析工具(我认为仅次于覆盖率),但它的价格相当高. (4认同)

use*_*071 7

如果通过开源,你真的意味着"免费",那么微软的早期分析是一个很好的分析.Windows仅限课程.它完全集成在Visual Studio和编译器中.例如:

cl /analyze Sample.cpp
Run Code Online (Sandbox Code Playgroud)