【问题标题】:Writing custom checkers for Clang Static Analyzer为 Clang 静态分析器编写自定义检查器
【发布时间】:2016-05-24 03:25:09
【问题描述】:

我刚刚完成了 clang 分析器页面中的“入门”说明。

我的 XCode 目前正在使用检查器 build 278

现在我正在尝试遵循一些我可以找到的指南来编写自己的自定义检查器,例如 http://blog.trailofbits.com/2014/04/27/using-static-analysis-and-clang-to-find-heartbleed/ http://bbannier.github.io/blog/2015/05/02/Writing-a-basic-clang-static-analysis-check.html

希望有人能指出我正确的方向,但我对构建 clang 项目并不是很熟悉。 是否有任何可用的 IDE 可以提供帮助? 我应该如何将我编写的自定义检查器添加到 build 278 中?

【问题讨论】:

    标签: c++ xcode clang llvm clang-static-analyzer


    【解决方案1】:

    我最近开始使用 clang 检查器,以下是我如何让我的自定义检查器与 clang 一起使用。

    您必须修改 Checkers.td 才能注册您的检查器。

    <path-to-llvm>/llvm/tools/clang/lib/StaticAnalyzer/Checkers/Checkers.td
    

    我做了一个调试检查器,将它放在调试组下并添加了以下几行:

    def MyCustomChecker : Checker<"DebugUsingMyChecker">,
    HelpText<"Print results of my custom checker">,
    DescFile<"DebugCheckers.cpp">; //this is the file where we define the class file of our checker
    

    然后编辑 DebugCheckers.cpp 以添加要由新注册的检查器调用的检查器类。

    <path-to-llvm>/llvm/tools/clang/lib/StaticAnalyzer/Checkers/DebugCheckers.cpp
    

    并在调试检查器标签下添加

    namespace 
    {
        class MyCustomChecker : public Checker<check::ASTCodeBody> {
        public:
            void checkASTCodeBody(const Decl *D, AnalysisManager& mgr,
                        BugReporter &BR) const {
                if (MyCustomChecker* CC = mgr.getAnalysis<CustomChecker>(D)) {
                     CC->dump(mgr.getSourceManager());
                }
            }
        };
    }
    
    void ento::registerMyCustomChecker(CheckerManager &mgr) {
        mgr.registerChecker<MyCustomChecker>();
    }
    

    在此之后,您可以将相关的类文件放在文件夹中:

    <path-to-llvm>/llvm/tools/clang/lib/Analysis/
    

    并编辑该文件夹中的 CMakeList.txt 以包含您的类文件。

    希望澄清这个过程。您还可以阅读此链接了解更多信息:http://clang-analyzer.llvm.org/checker_dev_manual.html

    就 IDE 而言,您可以使用任何支持基于 CMake 的项目(如 CLion)的 IDE。您可以查看此链接了解更多信息:http://llvm.org/docs/CMake.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-06
      • 2010-12-24
      • 2022-08-10
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 2012-08-11
      • 2016-11-17
      相关资源
      最近更新 更多