如何从我正在编写的llvm传递中检查-g标志(调试信息启用)是否已设置? 我只是想看看是否有办法通过我的传递获得命令行选项,包括-g。
答案 0 :(得分:1)
当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),而不是询问编译单元。