从LLVM IR获取C / C ++源代码数据

时间:2013-08-19 03:23:06

标签: c++ c llvm

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 APIgetCharaterData()),以便我可以找到AST节点和原始源代码之间的映射。我想在LLVM IR和源代码之间找到这样的映射 我可以从IR的调试信息中获取确切的特征数据吗?

感谢。

1 个答案:

答案 0 :(得分:7)

单独从IR调试信息中获取确切的字符数据是不可能的。您可以做的最好的事情是在某处手动保存源代码,然后使用从调试信息中获得的行和列信息。

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