静态分析工具:在 CppDepend 中使用 Clang
静态分析是一种计算机程序调试方法,通过检查代码而不执行程序来完成。该过程提供了对代码结构的理解,可以帮助确保代码符合行业标准,并可以发现难以检测的错误。
为了开发一个 C / C++ 静态分析工具,需要一个解析器来解析源代码。C++ 是一种非常强大的语言,但其语法有点复杂,这使得解析器不容易开发。
大约四年前,当我们开始开发 CppDepend 时,我们需要一个可靠的 C / C++ 解析器。当时,Clang 是一个选择,但它并没有得到广泛使用,我们不知道它最终是否会发展成为一个功能齐全的编译器前端。
去年,为了 CppDepend 3.0 的主要版本发布,我们重新评估了我们的 C / C++ 解析器,目标是获得更可靠的结果。我们检查了 Clang,看看它的发展方向,并惊讶地发现它现在几乎实现了所有 C++11 特性,并且变得非常流行。Clang 现在提供了坚实的基础设施来编写需要程序语法和语义信息的工具。
Clang 被设计为模块化的,就像其他编译器一样,它有三个阶段:
- 前端解析源代码,检查错误,并构建一个语言特定的抽象语法树 (AST) 来表示输入代码。
- 优化器:它的目标是对前端生成的 AST 进行一些优化。
- 后端:生成最终代码以供机器执行,它取决于目标架构。
在我们的案例中,我们只需要使用前端解析器,并且我们使用生成的 AST。为此,我们添加了我们自定义的 ASTFrontEndAction。
每个 ASTFrontEndAction 都创建了一个或多个 ASTConsumer,如以下依赖关系图所示
ASTConsumer 是一个抽象类,我们必须为我们的特定需求实现我们的 AST 消费者。为此,我们必须查看现有 AST 消费者的实现,以了解它们的工作原理,以下列出所有继承自 ASTConsumer 的类
我们以 ASTPrinter 和 ASTDumpXML 为例,了解如何实现我们特定的 AST 消费者。
感谢 LLVM 和 Clang 背后的所有开发者为提供强大的编译器所做出的巨大努力,以及感谢所有开源 C / C++ 贡献者,我们免费为您提供 CppDepend "专业版许可证"。CppDepend 可用于分析代码库,以:
• 提高代码库质量。
• 帮助新贡献者了解现有代码库。
• 自动化代码审查,以确保满足经理指定的编码规则。
• 生成自定义报告以用于文档目的。
要获取您的 CppDepend 专业版许可证,您只需向 [email protected] 发送邮件,并提供以下信息:
• 贡献者的姓名。
• 您贡献的补丁的链接。
谢谢!