7

我有这样的结构:

    struct A 
    {
        int a; 
        char b; 
    };

这个结构在大代码的不同地方被引用。指向这个结构的指针被传递给不同的函数,因此这个结构中的变量被更新。我想在这个结构中的变量 a 上设置一个观察点,因为它遍历许多函数。看看如何变化。如何设置这个观察点?

4

2 回答 2

7

首先设置一个断点,在其中使用break创建结构的实例,例如

break myfile.c:9

然后只需使用watch设置一个观察点,比如

watch myStructInstance.a

对于变量a

watch *0x7ffff75177f0

为内存地址。使用print可以很容易地获得内存地址,例如

print &myStructInstance.a

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

于 2012-05-31T11:45:25.040 回答
4

在调试我的虚拟内存模拟器时,我遇到了同样的问题。问题是如何密切关注结构中的数据。

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

我也尝试过使用观察点,但在我的机器上,我只能设置不超过 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。对我来说很好。

于 2017-12-07T22:04:36.163 回答