问题遇到的现象和发生背景
交叉编译移植了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)
请哪位知道的指条明路,谢谢~