我已经使用Clang来编译启用了调试信息的函数。对于Instruction
,有方便的getDebugLoc()
,但Function
没有这样的东西。给定Function
实例,如何获取调试信息(我猜是DISubProgram
形式)?
我见过the guide entry explaining how that debug information is represented,元数据确实包含一个返回该函数的链接,但显然没有回链接。我是否应该迭代模块中的所有元数据?
答案 0 :(得分:10)
我认为您需要使用DebugInfoFinder。以下是示例代码:
DebugInfoFinder Finder;
Finder.processModule(M);
for (DebugInfoFinder::iterator i = Finder.subprogram_begin(),
e = Finder.subprogram_end();
i != e; ++i) {
DISubprogram S(*i);
if (S.getFunction() == F) {
errs() << S.getLineNumber(); << "\n";
}
}
其中F是您正在寻找的功能。
答案 1 :(得分:6)
答案 2 :(得分:3)
我认为目前没有更简单的方法。曾经有一个全局元数据节点收集了所有函数元数据条目(llvm.dbg.sp
),但它刚刚被删除,转而支持llvm.dbg.cu
,它更密切地反映了DWARF结构。
我认为调试元数据的常见用法不需要按函数查找,并且可以删除 的任何额外信息,因为节省空间很重要,IR中的元数据是已经太大了。