gdb断点相关3——临时断点、条件断点、忽略断点

一、临时断点

1.1临时断点测试代码

#include 
#include 

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),和设置断点的过程一样
可以看到,设置了临时断点之后,运行程序,再次查看断点信息,发现已经没有断点了,只生效了一次
gdb断点相关3——临时断点、条件断点、忽略断点_第1张图片


二、条件断点

2.1 条件断点测试代码

#include 

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
gdb断点相关3——临时断点、条件断点、忽略断点_第2张图片


三、忽略断点

3.1 忽略断点测试代码

#include 

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次断点触发才会让程序暂停
gdb断点相关3——临时断点、条件断点、忽略断点_第3张图片
可以看到,设定忽略断点前5次触发后,下一次断点触发时,i的值是6

你可能感兴趣的:(gdb练习)