条件断点,顾名思义就是有条件才会触发的断点,一般设置此类断点形如:b xxx if xxx,如:
要触发此断点则需要 is_created == 0。打完断点我们也可以用 info b 查看一下当前已经设置的断点信息,如:
断点触发:
那这个条件是否可以随意设置呢?其实在我们打断点的时候,gdb 已经帮我们过滤了,如:
当我们随意设置一个条件时,如果在当前上下文中没有的声明或定义的话是无法设置成功的。
所以要设置成功条件,则必须为:
1,参数列表里的参数,如上面的 is_created
2,函数里的变量,如下
3,全局变量,如下
想想为什么是这样?我想是因为断点是基于栈桢的,那一个栈帧里就包括了函数参数列表及函数里的局部变量,栈帧之外的数据肯定是不可见的,那全局变量当然也是可见的,所以这三者都可以拿来当断点的判断条件。