小编Jan*_*uer的帖子

从LLVM IR获取精确的行/列调试信息

我试图找到LLVM中的指令,按行和列号(由第三方工具报告)来检测它们.为此,我clang -g -O0 -emit-llvm使用以下代码编译源文件并在元数据中查找信息:

const DebugLoc &location = instruction->getDebugLoc();
// location.getLine()
// location.getCol()
Run Code Online (Sandbox Code Playgroud)

不幸的是,这些信息绝对不准确.考虑以下Fibonacci函数的实现:

unsigned fib(unsigned n) {
    if (n < 2)
        return n;

    unsigned f = fib(n - 1) + fib(n - 2);
    return f;
}
Run Code Online (Sandbox Code Playgroud)

我想unsigned f = ...在结果LLVM IR中找到与赋值相对应的单个LLVM指令.我对右手边的所有计算都不感兴趣.生成的LLVM块包括相关的调试元数据:

[...]

if.end:                                           ; preds = %entry
  call void @llvm.dbg.declare(metadata !{i32* %f}, metadata !17), !dbg !18
  %2 = load i32* %n.addr, align 4, !dbg !19
  %sub = sub i32 %2, 1, !dbg !19
  %call = …
Run Code Online (Sandbox Code Playgroud)

c++ debugging llvm clang

7
推荐指数
1
解决办法
1917
查看次数

标签 统计

c++ ×1

clang ×1

debugging ×1

llvm ×1