Clang 静态分析器

Clang 静态分析器是一个源代码分析工具,在 C、C++ 和 Objective-C 程序中发现错误。

目前它可以作为一个独立的工具或在 Xcode 中运行。 独立工具从命令行调用,旨在与代码库的构建一起运行。

分析器是100%开源的,是 Clang 项目的一部分。与 Clang 的其余组件一样,分析器封装成 C++ 库,可以由其他工具和应用程序调用。

下载

Mac OS X

其他平台

对于其他平台,请按照有关从源代码构建分析器的说明进行操作。

analyzer in xcode
在 Xcode 中查看静态分析器结果
analyzer in browser
在浏览器中查看静态分析器结果

什么是静态分析?

术语“静态分析”被混淆,但在这里我们使用它来表示用于分析源代码以便自动发现错误的算法和技术的集合。这个想法类似于编译器警告(这对于发现编码错误是有用的),更进一步,还可以找到使用运行时调试技术(例如测试)才能发现的错误。

在过去几十年中,静态分析错误查找工具已经从基本的语法检查器发展到通过推理代码语义找到深层次的错误。Clang 静态分析器的目标是提供一个工业级的静态分析框架,用于分析 C、C++ 和 Objective-C 程序,这些程序是免费提供的,可扩展的,并且具有高质量的实现。

Clang 和 LLVM 的一部分

顾名思义,Clang 静态分析器构建在 ClangLLVM 之上。严格地说,分析器是 Clang 的一部分,因为 Clang 包含一组可重用的 C++ 库,用于构建强大的源代码级工具。Clang 静态分析器使用的静态分析引擎是 Clang 库,并且能够在不同的上下文和不同的客户端中重用。

重要注意事项

虽然我们相信静态分析器在发现 bug 方面已经非常有用,但我们要求您在使用它时记住几点。

工作正在进行中

分析器是一个持续的工作。有许多改进的计划,以提高其分析算法的精度和范围以及它将发现的错误的种类。虽然静态分析可以做到基本限制,但我们在“没有蛀牙”之前还有很长的路要走。

比编译慢

实际操作上,使用静态分析来自动找到源代码的深层次程序错误是要花时间的。由于最先进的静态分析工具执行非常深入的分析,静态分析可能比编译慢得多。

虽然 Clang 静态分析器被设计成尽可能快和轻量级,但不要指望它与编译程序一样快(即使启用了优化)。一些需要找到错误的算法在最坏的情况下需要指数时间。

Clang 静态分析器通过限制检查工作的数量以及使用聪明的算法来减少必须进行的工作量来找到错误,从而在合理的时间内运行。

误报

静态分析不完美。它会把行为正确的代码误报标记为错误。因为某些代码检查需要比其他代码检查更高的分析精度,所以在不同的检查之间,误报的概率可能出入很大。我们的长期目标是使分析器检查大多数代码低误报率。

请通过报告误报帮助我们。只有我们知道有哪些误报,误报的 bug 才能能得到解决。

更多检查

静态分析不是魔术; 静态分析器只能找到它被专门设计的 Checkers 找到的错误。如果有“特定”类型的 bug,您希望 Clang 静态分析器能找到,请提出功能需求或贡献自己的补丁。