2013-08-21 27 views
4

我已经使用Clang编译一个启用了调试信息的函数。对于Instruction s有方便的getDebugLoc(),但对于Function s没有这样的事情。鉴于一个Function实例,我怎么能得到调试信息(我猜在DISubProgram窗体)呢?如何从函数中获取调试信息?

我见过the guide entry explaining how that debug information is represented,元数据确实包含一个链接回该函数,但显然没有链接回来。我是否应该遍历模块中的所有元数据?

回答

2

我不认为现在有一个更简单的方法。曾经有一个全球元数据节点收集了所有功能元数据条目(llvm.dbg.sp),但它前一段时间被删除,转而更加接近反映DWARF结构的llvm.dbg.cu

我想这调试元数据的常见用途不需要通过功能查找,并可能被删除的任何额外的信息,删除,因为节省空间是重要的,在IR元数据已经是太大了。

9

我认为你需要使用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是您正在查找的功能。