我试图在运行时从我的LLVM
优化传递中收集一些信息。换句话说,我想知道编译后特定IR指令的物理地址。所以我的想法是将LLVM
元数据转换为可在运行时使用的LLVM
DWARF数据。我想附上自己的信息,而不是附加文件名和行号。我的问题分为两部分:
if (DILocation *Loc = I->getDebugLoc()) { // Here I is an LLVM instruction
unsigned Line = Loc->getLine();
StringRef File = Loc->getFilename();
StringRef Dir = Loc->getDirectory();
bool ImplicitCode = Loc->isImplicitCode();
}
但是如何设置此字段?我找不到相关的功能。
-g
进行编译,但我仍然没有看到调试信息。谢谢
你需要它的功能setDebugLoc()和信息只包括在结果中,如果你包括足够的。 The module verifier会告诉你你错过了什么。这两行也可能是你绊倒的原因。
module->addModuleFlag(Module::Warning, "Dwarf Version", dwarf::DWARF_VERSION);
module->addModuleFlag(Module::Warning, "Debug Info Version", DEBUG_METADATA_VERSION);