如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的调试信息中获取确切的特征数据吗?
感谢。
答案 0 :(得分:7)
单独从IR调试信息中获取确切的字符数据是不可能的。您可以做的最好的事情是在某处手动保存源代码,然后使用从调试信息中获得的行和列信息。
顺便说一句,有一种更简单的方法来获取Instruction
的调试信息:Instruction::getDebugLoc()
返回DebugLoc
个实例,然后您可以使用getLine()
查询getCol()
(但请务必先使用isUnknown
方法进行检查。)