C GDB:变量值相等时中断
我喜欢让GDB在变量等于我设置的某个值时设置断点,我尝试了以下示例:C GDB:变量值相等时中断,c,gdb,C,Gdb,我喜欢让GDB在变量等于我设置的某个值时设置断点,我尝试了以下示例: #include <stdio.h> main() { int i = 0; for(i=0;i<7;++i) printf("%d\n", i); return 0; } 正如您所看到的,GDB没有创建任何断点,这在GDB中可能吗?您可以为此使用一个监视点(数据上的断点而不是代码上的断点) 您可以从使用watchi开始 然后使用条件i==5为其设置一个条件
#include <stdio.h>
main()
{
int i = 0;
for(i=0;i<7;++i)
printf("%d\n", i);
return 0;
}
正如您所看到的,GDB没有创建任何断点,这在GDB中可能吗?您可以为此使用一个监视点(数据上的断点而不是代码上的断点) 您可以从使用
watchi
开始然后使用
条件i==5为其设置一个条件
您可以使用info watch
获取断点编号。有硬件和软件监视点。它们用于读取和写入变量。您需要查阅以下教程:
要设置观察点,首先需要将代码分解到环境中存在varianle i的位置,然后设置观察点
watch
命令用于设置用于写入的watchpoit,而rwatch
用于读取,而awatch
用于读取/写入。首先,您需要使用适当的标志编译代码,以启用调试到代码中
$ gcc -Wall -g -ggdb -o ex1 ex1.c
然后用你最喜欢的调试器运行你的代码
$ gdb ./ex1
给我看看代码
(gdb) list
1 #include <stdio.h>
2 int main(void)
3 {
4 int i = 0;
5 for(i=0;i<7;++i)
6 printf("%d\n", i);
7
8 return 0;
9 }
检查断点
(gdb) info b
Num Type Disp Enb Address What
1 breakpoint keep y 0x00000000004004fb in main at ex1.c:5
breakpoint already hit 1 time
5 read watchpoint keep y i
stop only if i==5
运行程序
(gdb) c
Continuing.
0
1
2
3
4
Hardware read watchpoint 5: i
Value = 5
0x0000000000400523 in main () at ex1.c:5
5 for(i=0;i<7;++i)
(gdb)c
持续的。
0
1.
2.
3.
4.
硬件读取观察点5:i
值=5
ex1.c:5处的main()中的0x0000000000400523
5表示(i=0;i以及嵌套在断点内的观察点
您还可以在“filename:line_number”上设置一个断点并使用条件。
我觉得有时候更容易
(gdb) break iter.c:6 if i == 5
Breakpoint 2 at 0x4004dc: file iter.c, line 6.
(gdb) c
Continuing.
0
1
2
3
4
Breakpoint 2, main () at iter.c:6
6 printf("%d\n", i);
如果你像我一样厌倦了改变行号,你可以添加一个标签
然后在标签上设置断点,如下所示:
#include <stdio.h>
main()
{
int i = 0;
for(i=0;i<7;++i) {
looping:
printf("%d\n", i);
}
return 0;
}
(gdb) break main:looping if i == 5
#包括
main()
{
int i=0;
对于(i=0;i(gdb)在当前上下文中观察i无符号“i”。
您必须位于代码中存在i
的位置。请尝试断开main
,运行
,c
,s
(确保通过声明的步骤),然后是答案上的命令。确保使用-g
标志编译程序。(即,使用调试信息)在执行开始之前,可能尚未加载与主可执行文件链接的其他编译单元/文件。一个很好的选项是使用start
,这类似于tb main
,run
。这将启动程序,使您可以更轻松地设置断点/观察点。
(gdb) break iter.c:6 if i == 5
Breakpoint 2 at 0x4004dc: file iter.c, line 6.
(gdb) c
Continuing.
0
1
2
3
4
Breakpoint 2, main () at iter.c:6
6 printf("%d\n", i);
#include <stdio.h>
main()
{
int i = 0;
for(i=0;i<7;++i) {
looping:
printf("%d\n", i);
}
return 0;
}
(gdb) break main:looping if i == 5