一、临时断点
1.1临时断点测试代码
#include <stdio.h>
#include <pthread.h>
typedef struct {
int a;
int b;
int c;
int d;
pthread_mutex_t mutex;
}ex_st;
int main (int argc, char *argv[]) {
ex_st st = {1, 2, 3, 4, PTHREAD_MUTEX_INITIALIZER};
printf("%d, %d, %d, %d\n", st.a, st.b, st.c, st.d);
return 0;
}
1.2临时断点测试过程
在使用gdb调试时,如果想让断点只生效一次,可以使用tbreak命令(缩写为tb),和设置断点的过程一样
可以看到,设置了临时断点之后,运行程序,再次查看断点信息,发现已经没有断点了,只生效了一次
二、条件断点
2.1 条件断点测试代码
#include <stdio.h>
int main (int argc, char *argv[]) {
int i = 0;
int sum = 0;
for (i = 1; i <= 280; ++i) {
sum += i;
}
printf("%d\n", sum);
return 0;
}
2.2 条件断点测试过程
gdb设置条件断点的命令是
break 行号 if 条件,意思是只有在条件满足的时候,断点才会被触发
在下面的程序中,可以看到断点在为101的时候触发了,此时打印sum的值,为5050 = (1+100)×100/2
三、忽略断点
3.1 忽略断点测试代码
#include <stdio.h>
int main (int argc, char *argv[]) {
int i = 0;
int sum = 0;
for (i = 1; i <= 280; ++i) {
sum += i;
}
printf("%d\n", sum);
return 0;
}
3.2 忽略断点测试过程
在设置了断点之后,可以使用命令
ignore 断点编号i cnt来忽略断点
意思是接下来的cnt次编号为i的断点触发都不会让程序暂停,只有第cnt+1次断点触发才会让程序暂停
可以看到,设定忽略断点前5次触发后,下一次断点触发时,i的值是6