[菜鸟]我的gdb条件中断怎么不起作用

发布于 2022-10-15 09:18:48 字数 1835 浏览 26 评论 0

本帖最后由 jeung 于 2011-04-18 11:08 编辑

我在观察 subj[0].allow[40] 这个值在哪个地方从0变为1的,加了break if,停在41行p subj[0].allow[40]为0,然后让它在183行停下,这时p发现它已经变为1,可中间gdb却没停下。
我只会粗浅的使用gdb,遇到这个现象也不知是什么原因,希望大家指教

Breakpoint 5, get_input (pfile=0x8421170, pnclass=0xbfa91974, pnlesson=0xbfa91970, pnam=0xbfa9196c, pnpm=0xbfa91968, pnsubj=0xbfa91978,
    subj=0xbfa90a18) at io.c:41
41              bzero(subj,(*pnsubj)*sizeof(struct subject));
(gdb) p subj[0].allow[40]
$21 = 0
(gdb) b if subj[0].allow[40]==1
Note: breakpoint 5 also set at pc 0x8049398.
Breakpoint 15 at 0x8049398: file io.c, line 41.
(gdb) info b
Num Type           Disp Enb Address    What
1   breakpoint     keep y   0x08049f6e in main at main.c:53
5   breakpoint     keep y   0x08049398 in get_input at io.c:41
        breakpoint already hit 1 time
15  breakpoint     keep y   0x08049398 in get_input at io.c:41
        stop only if subj[0].allow[40] == 1
(gdb) b 183
Breakpoint 16 at 0x8049c9e: file io.c, line 183.
(gdb) c
Continuing.

Breakpoint 16, get_input (pfile=0x8421170, pnclass=0xbfa91974, pnlesson=0xbfa91970, pnam=0xbfa9196c, pnpm=0xbfa91968, pnsubj=0xbfa91978,
    subj=0xbfa90a18) at io.c:183
183                     else if(0==strncasecmp(word+1,"End",MAX_STRLEN))
(gdb) p subj[0].allow[40]
$22 = 1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浸婚纱 2022-10-22 09:18:48

本帖最后由 jeung 于 2011-04-19 23:16 编辑

没有高人能指点么= =
我猜想是不是要在代码中显式的对那个allow[40]赋值才能为gdb捕获,换句话说就是gdb不能够监视内存值变化

送君千里 2022-10-22 09:18:48

回复 2# jeung

    这种情况我一般用数据断点:watch

帅的被狗咬 2022-10-22 09:18:48

回复 2# jeung

    监视内存值的变话 可以用数据断点。

像 void foo(int x)
我才会用条件断点:
b foo if x==13

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文