如何将调试信息附加到LLVM通行证中的指令中

How to attach debug information into an instruction in a LLVM Pass

本文关键字:通行证 LLVM 指令 调试 信息      更新时间:2023-10-16

我试图在运行时从我的LLVM优化通过中收集一些信息。换句话说,我想知道编译后特定的IR指令的物理地址。因此,我的想法是将LLVM元数据转换为可以在运行时使用的LLVM矮人数据。我不想附加自己的信息,而不是附加文件名和行号。我的问题分为两个部分:

  1. 这是一个可以获取指令的文件名和行号的代码:

    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(); }

但是如何设置此字段?我找不到相关功能。

  1. 如何在(文件名和行号)运行时看到更新的调试信息?我使用-g进行编译,但我仍然看不到调试信息。

谢谢

您需要的函数setDebugloc(),并且如果包含足够的内容,则信息仅包含在结果中。模块验证者会告诉您您缺少的内容。这两行也可能是绊倒你的东西。

module->addModuleFlag(Module::Warning, "Dwarf Version", dwarf::DWARF_VERSION);
module->addModuleFlag(Module::Warning, "Debug Info Version", DEBUG_METADATA_VERSION);