如何从 llvm pass 检查 -g 标志(调试信息启用)是否已设置

问题描述 投票:0回答:1

如何从我正在编写的 llvm pass 中检查 -g 标志(调试信息启用)是否已设置? 我只是想看看是否有办法通过我的通行证获取命令行选项,包括 -g。

c++ clang llvm
1个回答
1
投票

Clang 生成 LLVM IR 时,不会直接记录使用了哪些命令行选项。但是,您可以通过检查所述调试信息是否存在来轻松检查调试信息是否已启用。

我能想到的最简单的方法是检查是否存在

!llvm.dbg.cu
命名元数据节点:

bool wasCompiledWithDebugInfo(const Module& M) {
  return M.getNamedMetadata("llvm.dbg.cu") != NULL;
}

这应该适用于大多数情况有一个问题 - 单个

Module
实际上可能由链接在一起的多个编译单元组成,其中一些使用调试信息编译,有些则不编译。如果你不关心这个,那么你就得到了答案。

如果您确实关心,则需要更具体地说明您真正想要实现的目标。例如,如果您关心某个特定函数是否使用调试信息进行编译,那么您应该直接检查该函数(通过搜索描述它的

DISubprogram
元数据),而不是询问编译单元。

© www.soinside.com 2019 - 2024. All rights reserved.