【发布时间】:2014-02-11 16:49:40
【问题描述】:
如何从我正在编写的 llvm 通行证中检查是否设置了 -g 标志(启用调试信息)? 我只是想看看是否有办法通过我的通行证获取命令行选项,包括-g。
【问题讨论】:
标签: c++ compiler-construction clang llvm
如何从我正在编写的 llvm 通行证中检查是否设置了 -g 标志(启用调试信息)? 我只是想看看是否有办法通过我的通行证获取命令行选项,包括-g。
【问题讨论】:
标签: c++ compiler-construction clang llvm
当 Clang 生成 LLVM IR 时,它不会直接记录使用了哪些命令行选项。但是,您可以通过检查是否存在所述调试信息来轻松检查是否启用了调试信息。
我能想到的最简单的方法是检查 !llvm.dbg.cu 命名元数据节点是否存在:
bool wasCompiledWithDebugInfo(const Module& M) {
return M.getNamedMetadata("llvm.dbg.cu") != NULL;
}
这应该适用于大多数情况。有一个问题 - 一个 Module 实际上可能由多个链接在一起的编译单元组成,一些使用调试信息编译,而另一些则没有。如果你不关心这个,那么你就得到了答案。
如果您确实关心,则需要更具体地说明您真正想要实现的目标。例如,如果您关心是否使用调试信息编译了特定函数,那么您应该直接检查该函数(通过searching for the DISubprogram metadata describing it)而不是询问编译单元。
【讨论】: