awatch 命令: 设置读写观察点,也就是当发生读取变量或改变变量值的行为时,程序就会暂停住。
注意,awatch 命令只支持设置硬件观察点。
下面用一段代码来说明一下,在 gdb 调试中,设置读写观察点的方法,代码如下:
- #include
- #include
- #include
-
- int gdata = 0;
-
- void *thread1(void *p_arg)
- {
- while (1)
- {
- gdata++;
- sleep(5);
- }
- }
- void *thread2(void *p_arg)
- {
- while (1)
- {
- printf("***gdata: %d\n", gdata);
- sleep(5);
- }
- }
-
- int main(void)
- {
- pthread_t t1, t2;
-
- pthread_create(&t1, NULL, thread1, "Thread-1");
- pthread_create(&t2, NULL, thread2, "Thread-2");
-
- sleep(1000);
- return 0;
- }
下面进行 gdb 调试,设置读写观察点,即无论是对变量 gdata 读或更改,程序都会停下来。
首先,输入 start 命令,运行程序。
其次,输入 n 命令进行单步调试,单步运行程序直至两个线程都创建完成之后。
其次,输入 awatch gdata 命令,设置读写观察点。
最后,输入 c (continue 缩写) 命令,继续运行程序。

可以看到,通过输入 atwatch gdata 命令设置了读写监控点,即无论是对变量 gdata 读或更改,程序都会停下来。