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