GDB禁用与删除断点
发布时间:2022-07-11 12:22 所属栏目:51 来源:互联网
导读:我们知道,GDB 调试器支持 3 种断点,分别为普通断点(用 break 命令创建)、观察断点(用 watch 命令建立)以及捕捉断点(用 catch 命令建立)。并且如果需要的话,我们可以在被调试程序中打多个断点,甚至于 GDB 允许在同一位置打多个断点。 这就产生一个
我们知道,GDB 调试器支持 3 种断点,分别为普通断点(用 break 命令创建)、观察断点(用 watch 命令建立)以及捕捉断点(用 catch 命令建立)。并且如果需要的话,我们可以在被调试程序中打多个断点,甚至于 GDB 允许在同一位置打多个断点。 这就产生一个问题,如果之前建立的断点不再需要或者暂时不需要,该如何删除或者禁用呢?常用的方式有 2 种: 使用 quit 命令退出调试,然后重新对目标程序启动调试,此方法会将消除上一次调试操作中建立的所有断点; 使用专门删除或禁用断点的命令,既可以删除某一个断点,也可以删除全部断点。 本节教大家如何使用命令删除或者禁用之前已建好的断点,讲解过程中,将以调试如下 C 语言程序为例: #include <stdio.h> int main(){ int num = 0; scanf("%d", &num); printf("%d", num); return 0; } 程序存储在~/demo/main.c文件中,并已将其编译为可调试的 main.exe 可执行文件: [root@bogon demo]# gcc main.c -o main.exe -g [root@bogon demo]# ls main.c main.exe 查看当前已建好的断点 对于当前调试环境中已经建好且尚未删除的断点,可以通过以下 2 种方式查看它们。 1) 借助如下指令,可以查看当前调试环境中存在的所有断点,包括普通断点、观察断点以及捕捉断点: (gdb) info breakpoint [n] (gdb) info break [n] 参数 n 作为可选参数,为某个断点的编号,表示查看指定断点而非全部断点。 要知道,任何类型的断点在建立时,GDB 调试器都会为其分配一个独一无二的断点编号。以 main.exe 为例,我们尝试建立如下断点: (gdb) b 1 Breakpoint 1 at 0x1189: file main.c, line 2. (gdb) r Starting program: ~/demo/main.exe Breakpoint 1, main () at main.c:2 2 int main(){ (gdb) watch num Hardware watchpoint 2: num (gdb) catch throw int Catchpoint 3 (throw) 可以看到,我们通过 break 命令建立了一个普通断点,其编号为 1;通过 watch 命令建立了一个观察断点,其编号为 2;通过 catch 命令建立了一个捕捉断点,其编号为 3。 在此基础上,可以通过执行 info break 或者 info breakpoint 命令,查看所有断点的具体信息: (gdb) info break Num Type Disp Enb Address What 1 breakpoint keep y 0x0000555555555189 in main at main.c:2 breakpoint already hit 1 time 2 hw watchpoint keep y num 3 catchpoint keep y exception throw matching: int (gdb) 由于当前环境中仅有 1 个观察断点,因此 info watchpoint 命令仅罗列了编号为 2 的观察断点的信息。需要注意的是,该命令仅能用于查看观察断点,普通断点和捕捉断点无法使用该命令。 GDB删除断点 无论是普通断点、观察断点还是捕捉断点,都可以使用 clear 或者 delete 命令进行删除。 1) clear命令 clear 命令可以删除指定位置处的所有断点,常用的语法格式如下所示: (gdb) clear location 参数 location 通常为某一行代码的行号或者某个具体的函数名。当 location 参数为某个函数的函数名时,表示删除位于该函数入口处的所有断点。 (编辑:ASP站长网) |
相关内容
网友评论
推荐文章
热点阅读