为什么gdb中的watch命令无效?

问题遇到的现象和发生背景

交叉编译移植了gdb,在板子上用的时候,其他命令如bt、n、c、thread、r、等命令均可正常使用,但是唯独十分香的watch用不了。因为偶尔会遇到变量的值被未知的那个地方覆盖了,只能通过watch来定位,但是watch竟然刚好用不了。

问题相关代码,请勿粘贴截图

写了一个demo代码,如下:

#include<stdio.h>
#include<unistd.h>

static int g_a = 0;

void main(void)
{
        while(1)
        {
                g_a++;
                printf("g_a is %d\n", g_a);
                sleep(1);
        }
}
运行结果及报错内容

然后交叉编译,到设备上用gdb起,然后watch g_a,然后run,按说gdb会停下来,说g_a改变了,但是程序丝毫没有阻拦的往下走:

root@ibox:~# ./gdb dddd
GNU gdb (GDB) 7.11.1
.........此处省略一大堆gdb的打印..........
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from dddd...done.
(gdb) watch g_a
Hardware watchpoint 1: g_a
(gdb) r
Starting program: /root/dddd
g_a is 1
g_a is 2
g_a is 3
g_a is 4
^Xg_a is 5
^C
Program received signal SIGINT, Interrupt.
0x76f3d038 in nanosleep () from /lib/libc.so.6
(gdb) q
我的解答思路和尝试过的方法

网上类似的问题,有人说编译时加上-ggbd3就好了,但是我试了依然不行,我的Makefile如下:

CC=arm-linux-gnueabihf-gcc

MY_FLAGS=-ggdb3

dddd:
        $(CC) main.c -o $@ $(MY_FLAGS)

请哪位知道的指条明路,谢谢~

watch需要配合断点使用,单独的一个watch肯定不会停止啊。先设置断点,然后运行程序,程序在断点处停止,这时候可以用watch查看变量的值。
参考如下:

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632