GDB调试之调试断点管理(三)

一、为代码行设置断点

调试代码下载地址

比如说在文件main.cpp的38行和46行分别设置一个断点:

使用run命令继续向下执行,会在38行断点处停下来,接着使用c命令继续执行,将会在46行断点出停下来。

二、为函数设置断点

比如说为函数testfun()设置断点:

从上面可以看出,在两处设置了断点,因为代码中有两个testfun()函数;所以在为函数设置断点时,会把所有同名函数都设置上断点,这就是为函数设置断点的功能。如果有多个函数而且函数名是一样的,无论参数是否相同,返回值是否相同,是虚函数也好,普通函数也好,只要函数名称相同,那么执行"b 函数名"这个命令,会把所有的名字的函数都设置上断点。

继续向下执行,程序分别会在27行和32行处依次停下来。

 三、为满足正则表达式的函数设置断点

从上述的代码中可以看出,无论是在main.cpp文件中还是在student.cpp文件中,有很多函数中都包含"work"关键字,如果现在想把所有带work关键字的函数都设置上断点,那么就可以用rb命令。

四、设置条件断点

 当满足一定条件的时候,这个断点才会命中,如果不满足条件,即使设置了断点,程序在执行到断点处也不会停下来的。

上述代码中的sum()函数中有一个for循环,假设想在14行设置一个断点,那么每执一次循环,断点就会在14行中断,如果我们只想在i等于某个值的时候中断下来,则需要设置条件断点。比如说只有当 i=90的时候才在14行中断,执行命令" b main.cpp:14 if i==90"即可。查看设置的断点"stop only if i==90",可以看出只有i=90的时候断点才会中断。

现在我们来执行程序并查看i的值:

条件断点除了可以在循环中设置断点外, 其他地方也有很多地方可以设置条件,比如说是一个字符的值或者别的变量达到某一个值的时候,都可以使用条件断点。

五、设置临时断点

临时断点表示这个断点是临时性的,临时断点一旦中断下来就不会起效果了,换句话说就是只会执行一次。命中一次之后就不会在命中,哪怕这个临时断点设置在循环中的,它也只会执行一次。

我们在for循环中设置了一个临时断点,当程序执行到14行这个断点后就会向普通断点一样中断,但是当循环再次执行到14行的时候,临时断点已经被删除了,所以不会再中断下来,使用命令查看设置的断点,可以看出已经没有任何断点存在了。

六、查看/禁用/删除断点

1.查看所有的断点

2.禁用、启用断点

3.删除断点

posted @ 2024-01-11 10:12  TechNomad  阅读(45)  评论(0编辑  收藏  举报