为Clang Static Analyzer编写自定义检查器

时间:2016-05-24 03:25:09

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

我刚刚完成了"入门"来自clang分析器页面的说明。

我的XCode目前正在使用checker 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

希望有人能指出我正确的方向,而且我对建立铿锵项目并不是很熟悉。 有没有可用的IDE可以提供帮助? 我应该如何添加我写入构建278的自定义检查器?

1 个答案:

答案 0 :(得分:-1)

我最近开始使用clang checker'以及我如何使用自定义检查器来处理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

并在debug checkers tag

下添加
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的项目的IDE(如CLion)。您可以查看此链接了解更多信息:http://llvm.org/docs/CMake.html