关于struct变量的gdb观察点

时间:2012-05-31 11:09:53

标签: linux gdb watchpoint

我有这样的结构:

    struct A 
    {
        int a; 
        char b; 
    };

此结构在大型代码中的各个位置引用。指向此结构的指针将传递给不同的函数,因此更新此结构中的变量。我希望在这个结构中设置变量a的观察点,因为它遍历许多函数。看看如何改变。如何设置此观察点?

2 个答案:

答案 0 :(得分:6)

首先设置断点,使用 break 创建结构的实例,例如

break myfile.c:9

然后只需使用 watch 设置观察点,例如

watch myStructInstance.a

表示变量 a

watch *0x7ffff75177f0

表示内存地址。使用 print 可以轻松获得内存地址,例如

print &myStructInstance.a

现在,每当变量a或给定的内存地址被修改时,gdb就会中断。

答案 1 :(得分:3)

调试虚拟内存模拟器时遇到同样的问题。问题是如何仔细查看结构中的数据。

我尝试使用打印来检查,但那太吵了。因为我必须打印出超过15个变量。

我也尝试使用watchpoint,但在我的机器上,我只能设置不超过4个硬件观察点。那甚至都不接近我的目标。

最后,我通过在.gdbinit文件中使用用户定义的函数找到我的解决方案。例如如果我想观看我的结构数组,请使用

define lookintoStructs
    if mystruct != 0x0
        print mystruct[0]
        print mystruct[1]
        print mystruct[2]
        print mystruct[3]
        print mystruct[4]
        print mystruct[5]
    end
end

为了使它更方便使用,我想把它挂钩到我在gdb中的下一条指令。

define hook-next
    lookintoStructs
end

所以当我在gdb中调用next或n时,可以自动调用lookintoStructs。对我来说很好。