[菜鸟]我的gdb条件中断怎么不起作用
本帖最后由 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
本帖最后由 jeung 于 2011-04-19 23:16 编辑
没有高人能指点么= =
我猜想是不是要在代码中显式的对那个allow[40]赋值才能为gdb捕获,换句话说就是gdb不能够监视内存值变化
回复 2# jeung
这种情况我一般用数据断点:watch
回复 2# jeung
监视内存值的变话 可以用数据断点。
像 void foo(int x)
我才会用条件断点:
b foo if x==13