我想获取指令的行号(以及变量声明的行号 - alloca 和 global)。该指令保存在指令数组中。我有这个功能:
Constant* metadata::getLineNumber(Instruction* I){
if (MDNode *N = I->getMetadata("dbg")) { // this if is never executed
DILocation Loc(N);
unsigned Line = Loc.getLineNumber();
return ConstantInt::get(Type::getInt32Ty(I->getContext()), Line);
} // else {
// return NULL; }
}
在我的 main() 中,我有:
errs()<<"\nLine number is "<<*metadata::getLineNumber(allocas[p]);
结果为 NULL,因为I->getMetadata("dbg")
它是假的。
是否有可能在不重建 LLVM 框架的情况下在 LLVM 中启用 dbg 标志,例如在编译目标程序或运行我的通行证时使用标志(我使用了 -debug)?
使用“-O3 -g”编译程序应该会提供完整的调试信息,但我仍然得到相同的结果。我知道http://llvm.org/docs/SourceLevelDebugging.html,从中我可以看到从元数据字段中获取源代码行号非常容易。
PS:对于 Allocas,看来我必须使用 DbgInfoPrinter.cpp 中的 findDbgDeclare 方法。
先感谢您 !