panfei263031 2022-02-22 13:53 采纳率: 50%
浏览 189
已结题

为什么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)

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

  • 写回答

2条回答 默认 最新

查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月22日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。