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