#include <stdio.h>
int main()
{
int i;
for (i=0; i<30 ;i++) {
printf ("%d\n", i);
}
return 0;
}
在gdb中,我通常设置一个断点,然后指定一个watchpoint作为要在该断点上执行的命令:
(gdb) break main
Breakpoint 1 at 0x4004b0: file main.c, line 6.
(gdb) command
Type commands for when breakpoint 2 is hit, one per line.
End with a line saying just "end".
>watch i
>end
每当监视变量发生变化时,执行就会停止,问题是没有办法(据我所知)告诉gdb只打印监视变量的值并继续,因为它是一个嵌套的观察点。如果它是一个独立的观察点,可以使用命令'continue'轻松完成(当我在范围内时,如果是main()):
(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不停在嵌套的观察点上,只打印值变化?或者更好的是,指定要在嵌套监视/断点上执行的命令?
我在gdb中进一步尝试'设置投诉0'和'设置确认关闭'但无效
答案 0 :(得分:2)
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
在观察点上创建单独的命令列表(创建时):
continue