7

http://llvm.org/docs/SourceLevelDebugging.html中所述,
我可以使用以下代码从 LLVM IR 中找到源代码的行号和列号。

if (MDNode *N = I->getMetadata("dbg")) {  // Here I is an LLVM instruction
  DILocation Loc(N);                      // DILocation is in DebugInfo.h
  unsigned Line = Loc.getLineNumber();
  StringRef File = Loc.getFilename();
  StringRef Dir = Loc.getDirectory();
}

但是,我想要更准确的信息。
在 AST 级别,clang 提供了FullSourceLoc API ( getCharaterData()) 以便我可以找到 AST 节点和原始源代码之间的映射。我想找到 LLVM IR 和源代码之间的这种映射。
我可以从 IR 的调试信息中获取准确的字符数据吗?

谢谢。

4

1 回答 1

7

仅从 IR 调试信息中无法获得准确的字符数据。您可以做的最好的事情是手动将源代码保存在某处,然后使用您从调试信息中获得的行和列信息。

顺便说一句,有一种更简单的方法可以获取Instructions 的调试信息:Instruction::getDebugLoc()返回一个DebugLoc实例,然后您可以使用getLine()and查询该实例getCol()(但请务必先使用其isUnknown方法检查它)。

于 2013-08-19T06:04:12.953 回答