我已经使用Clang来编译一个启用了调试信息的函数.对于Instructions来说,这是方便的getDebugLoc(),但对于s来说没有这样的东西Function.给定一个Function实例,我如何才能获得调试信息(我在猜测DISubProgram形式)?
我已经看到指南条目解释了如何表示调试信息,元数据确实包含一个返回函数的链接,但显然没有回链接.我应该迭代模块中的所有元数据吗?
Kyr*_*kos 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";
}
}
Run Code Online (Sandbox Code Playgroud)
其中F是您正在寻找的功能.
我认为目前没有更简单的方法。曾经有一个全局元数据节点收集所有函数元数据条目 ( llvm.dbg.sp),但不久前它被删除了,以llvm.dbg.cu更紧密地反映 DWARF 结构。
我认为调试元数据的常见用途不需要按功能查找,并且任何可以删除的额外信息都被删除了,因为节省空间很重要,而且 IR 中的元数据已经太大了。
| 归档时间: |
|
| 查看次数: |
1320 次 |
| 最近记录: |