防止gdb在观察点停止 文件main.c:

防止gdb在观察点停止 文件main.c:,gdb,watchpoint,Gdb,Watchpoint,只要监视变量被更改,执行就会停止,问题是(据我所知)没有办法告诉gdb只打印监视变量的值并继续,因为它是嵌套的监视点。如果它是一个独立的观察点,那么可以使用命令“continue”(当我在范围If main()中时)轻松完成: 那么,gdb有没有办法不在嵌套的观察点上停止,只打印值更改?或者更好的是,指定要在嵌套的监视/断点上执行的命令 我在gdb中进一步尝试了“设置投诉0”和“设置确认关闭”,但没有任何效果gdb没有嵌套观察点的概念。所有断点和观察点都位于顶层,无论您在何处设置它们 以下是您想

只要监视变量被更改,执行就会停止,问题是(据我所知)没有办法告诉gdb只打印监视变量的值并继续,因为它是嵌套的监视点。如果它是一个独立的观察点,那么可以使用命令“continue”(当我在范围If main()中时)轻松完成:

那么,gdb有没有办法不在嵌套的观察点上停止,只打印值更改?或者更好的是,指定要在嵌套的监视/断点上执行的命令


我在gdb中进一步尝试了“设置投诉0”和“设置确认关闭”,但没有任何效果

gdb没有嵌套观察点的概念。所有断点和观察点都位于顶层,无论您在何处设置它们

以下是您想要的:

(gdb) break main
Breakpoint 1 at 0x40052c: file t.c, line 6.
(gdb) commands
>watch i
>commands
 >c
 >end
>c
>end
这将在断点1上设置命令列表:

watch i
continue
和监视点上的单独命令列表(创建时):


不幸的是,这不起作用,这不是一个嵌套的监视/断点吗?当我键入第一个“end”时,命令输入停止,当我运行二进制文件时,我得到一个错误:不能在断点的命令中使用“commands”命令。答案是为我的GDB会话剪切/粘贴的,所以这至少对某些版本的GDB有效,我真的很惊讶它对你不起作用。你确定你键入的命令与我上面输入的命令完全相同吗?非常感谢你确认,@Employed俄语-如果你在会话中设置断点之间基本上
continue
,那么continue技巧非常有效;但是如果您手动执行
步骤
,这可能是一个问题,因为当到达给定的断点时,gdb将不再保持停止状态,而是开始运行(也就是说,按照其指示继续)。如果单步执行,如何保持停止,如果运行,如何继续?干杯
(gdb) watch i
Hardware watchpoint 2: i
(gdb) command
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
>continue
>end
(gdb) break main
Breakpoint 1 at 0x40052c: file t.c, line 6.
(gdb) commands
>watch i
>commands
 >c
 >end
>c
>end
watch i
continue
continue