在一个clang插件中,如何查看编译翻译单元是不是出错?
Posted
技术标签:
【中文标题】在一个clang插件中,如何查看编译翻译单元是不是出错?【英文标题】:In a clang plugin, how do you see whether there was an error compiling the translation unit?在一个clang插件中,如何查看编译翻译单元是否出错? 【发布时间】:2017-12-15 15:36:41 【问题描述】:如果为要运行我的插件的 AST 编译代码时出错,我希望我的 clang 插件实际上不做任何事情。
但是,我不知道哪个对象包含编译期间生成的错误列表。
是否有用于获取在 TU 编译期间生成的所有错误(或所有诊断)的布尔查询或列表 API?
谢谢。
【问题讨论】:
【参考方案1】:我最终找到了一种从 CompilerInstance
对象中获取错误计数的方法:
auto & ast_context = compiler_instance.getASTContext();
auto & diagnostics_engine = ast_context.getDiagnostics();
auto diagnostic_consumer = diagnostics_engine.getClient();
auto error_count = diagnostic_consumer->getNumErrors();
if (error_count > 0)
llvm::report_fatal_error("Errors during compilation, plugin aborting");
我不知道这是否是最好的方法,但是当我将上面的代码放在我从 ast_matchers::MatchFinder::MatchCallback
派生的类的 onStartOfTranslationUnit
中时,它对我有用。
【讨论】:
以上是关于在一个clang插件中,如何查看编译翻译单元是不是出错?的主要内容,如果未能解决你的问题,请参考以下文章
如何调试 dsymutil 错误:“Clang 模块预计只有 1 个编译单元。”
从多个编译单元引用模板化静态变量时,Clang 链接到不同位置
clang 插件编译错误:未定义符号 llvm::Registry<clang::PluginASTAction, llvm::RegistryTraits<clang::PluginAS