我刚刚按照铛分析器页面上的“入门”说明完成操作。

我的XCode当前使用检查器内部版本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会有所帮助?
我应该如何将编写的自定义检查器添加到版本278?

最佳答案

我最近开始使用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


并在debug checkers标签下添加

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

关于c++ - 为Clang静态分析器编写自定义检查器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37403871/

10-11 00:47