#include <stdio.h>
typedef struct ThingStruct {
int arr[8];
int after;
} Thing;
void foo(int i) {
Thing thing;
int* ip = &thing.after;
thing.after = 12345;
printf("beforehand\n");
thing.arr[i] = 55;
printf("done\n");
}
int main() {
foo(8);
}
此代码意外地将数组末尾改为thing.after
。我想尝试通过使用gdb找到thing.after
正在更改的行。因此,我使用-g编译,在第12行放置了一个断点,然后在thing.after
上放置了一个观察点,但即使在第14行放置断点,观察点也不会触发,但确实thing.after
确实发生了变化。当变量从数组末端变化时,gdb观察点将不起作用
我甚至尝试了thing.after
的地址,并设置了一个观察点,但它仍然没有触发。
'foo'仅在本次测试调用一次。 –
好的,这是2个问题,在下一行没有触发,而且在一个更大的程序中,它将-g标签1或2行偏移,这让我感到困惑,认为观察点根本没有触发。 – Buge