【发布时间】:2017-03-14 15:46:05
【问题描述】:
我想在 IR 中打印调试信息的确切数量,我该怎么做?
例如,考虑如下的 IR 块,
call void @llvm.dbg.declare(metadata i32* %a, metadata !10, metadata !11), !dbg !12!
!12 = !DILocation(line: 19, column: 7, scope: !6)
我想将!12 打印为字符串以进行调试。我可以通过做得到DILocation的对象
Instruction::getDebugLoc()->get()
但我得到的只是一个指针,没有这样的接口来获取数字。我可以假设 LLVM 在实际生成位码时给出了数字,因为转储 DILocation 会给出类似
的结果<0x7342628> = !DILocation(line: 23, column: 3, scope: <0x733e5f8>)
这个。但是当我使用 Instruction::dump() 时,它给了我一些看起来像
call void @llvm.dbg.declare(metadata i32* %a, metadata !10, metadata !11), !dbg !12
这个,所以我很困惑它在运行时是否有调试信息的编号信息。
是否有编号信息?如果是这样,我如何获得该信息?如果没有,我应该在哪里检查以查找 LLVM 中位码的生成?
【问题讨论】: