我有这样的结构:在一个大的代码的不同位置gdb的观察点
struct A
{
int a;
char b;
};
这种结构被引用。指向这个结构体的指针被传递给不同的函数,并相应地更新这个结构体中的变量。我想在这个结构中的变量a上设置一个观察点,因为它在许多函数中传递。看看有什么变化。我如何设置这个观察点?
我有这样的结构:在一个大的代码的不同位置gdb的观察点
struct A
{
int a;
char b;
};
这种结构被引用。指向这个结构体的指针被传递给不同的函数,并相应地更新这个结构体中的变量。我想在这个结构中的变量a上设置一个观察点,因为它在许多函数中传递。看看有什么变化。我如何设置这个观察点?
首先设置一个断点在其中创建使用休息你的结构的情况下,像
break myfile.c:9
就用手表设置观察点,像
watch myStructInstance.a
对于变量a或
watch *0x7ffff75177f0
为内存地址。存储器地址可以容易地通过使用打印得到,像
print &myStructInstance.a
现在每次变量一个或给定的存储器地址被改性的gdb将断裂。
我在调试我的虚拟内存模拟器时遇到同样的问题。问题是如何密切关注结构中的数据。
我试过使用打印来检查,但那太嘈杂了。因为我必须打印出超过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。对我来说工作得很好。