加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

GDB禁用与删除断点

发布时间:2022-07-11 14:03:36 所属栏目:语言 来源:互联网
导读:我们知道,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 参数为某个函数的函数名时,表示删除位于该函数入口处的所有断点。

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读