我喜欢让GDB设置一个断点,当一个变量等于我设置的某个值时,我try 了以下示例:

#include <stdio.h>
main()
{ 
     int i = 0;
     for(i=0;i<7;++i)
        printf("%d\n", i);

     return 0;
}

gdb的输出:

(gdb) break if ((int)i == 5)
No default breakpoint address now.
(gdb) run
Starting program: /home/SIFE/run 
0
1
2
3
4
5
6

Program exited normally.
(gdb)

正如你所看到的,GDB没有任何突破点,这在GDB中是可能的吗?

推荐答案

除了在断点内嵌套的监视点之外 您还可以在"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

C++相关问答推荐

如何从TPS特定的TGPT_PUBLIC数据 struct 中以OpenSSL的EVP_PKEY

有什么方法可以检测SunOS上的SparcWorks吗?

Apple Libm的罪恶功能

C中是否有语法可以直接初始化一个常量文本常量数组的 struct 成员?

堆栈帧和值指针

拥有3x3二维数组并访问数组[1][3]等同于数组[2][0]?

C在声明带有值的数组时,声明大小有用吗?

如果dim指定数组中的数据量,使用dim-1会不会潜在地导致丢失一个元素?

函数内的局部字符指针

限制不同类型的限定符

每次除以或乘以整数都会得到0.0000

如何在POSIX-UEFI中获得输入?

cairo 剪辑区域是否存在多个矩形?

如何将C中的两个字符串与从文件接收的字符串中的字符数进行比较

当我用scanf(&Q;%S%S%S&Q;,单词0,单词1,单词2)输入多个单词时,除了最后一个单词外,每个单词的第一个字符都丢失了

发送和接收的消息中的Unix域套接字不匹配

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?如果是,是哪一个?

如何打印循环调度问题的时间表

哪些C++功能可以在外部C块中使用

System V 消息队列由于某种原因定期重置