7

我使用 Clang 编译了一个启用了调试信息的函数。对于Instructions 来说有方便的getDebugLoc(),但对于 s 没有这样的东西Function。给定一个Function实例,我怎样才能得到它的调试信息(我猜是DISubProgram形式)?

我已经看到指南条目解释了如何表示调试信息,并且元数据确实包含返回该函数的链接,但显然没有返回链接。我应该遍历模块中的所有元数据吗?

4

3 回答 3

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 是您要查找的函数。

于 2013-10-30T15:25:07.453 回答
8

您可以使用 doxygen 中描述的 getSubprogram() :函数类

于 2018-05-05T16:33:39.333 回答
3

我认为目前没有更简单的方法。曾经有一个全局元数据节点收集所有函数元数据llvm.dbg.sp条目llvm.dbg.cu

我想调试元数据的常见用途不需要按功能查找,并且任何可以删除的额外信息都被删除了,因为节省空间很重要,而且 IR 中的元数据已经太大了。

于 2013-08-23T16:29:24.503 回答