delete不带参数可清空所有断点,包括普通断点、观察点和捕捉点,执行后编号重置为1;clear则仅按源码位置删除,二者核心区别在于delete按编号、clear按位置。

delete 不带参数就清空所有断点
最直接、最常用的方式就是输入 delete(或简写为 d),不跟任何编号或范围,GDB 就会删除当前调试会话中所有类型的断点:普通断点、观察点(watch)、捕捉点(catch)全算在内。
这个操作不可撤销,执行后断点编号全部重置,后续新设断点从 1 开始重新编号。
-
delete和delete breakpoints效果完全一样 - 别误用
clear——它只删「某位置」的断点(比如某行、某函数),不是清空全部 - 如果正在调试多线程程序,
delete同样清除所有线程相关的断点,无需额外处理
clear 和 delete 的关键区别在哪
clear 是按「源码位置」删断点,delete 是按「断点编号」删。这是新手最容易混淆的点。
比如你在 main.c:15 设置了两个断点(编号 1 和 2),又在 helper.c:8 设置了一个(编号 3):
-
clear 15→ 只删main.c:15上的那两个断点(1 和 2),编号 3 保留 -
clear main→ 删所有设在main函数入口的断点 -
delete 1-2→ 明确删编号 1 和 2,不管它们在哪一行或哪个文件 -
delete→ 编号 1/2/3 全部消失
想留着断点但暂时不用?用 disable
频繁删了又设,容易丢条件、搞混编号。更稳妥的做法是禁用而非删除:
-
disable不带参数 → 所有断点状态变为Enb = n,但编号、条件、命中次数全保留 -
enable可随时恢复,比重新break更快更准 - 尤其适合调试循环体时临时屏蔽某个条件断点,避免反复中断又重设
注意:disable breakpoints 和 disable 等价,GDB 会自动识别上下文。
脚本里批量清理要防编号漂移
在自动化调试脚本或 -ex 链式命令中,别假设断点编号固定:
- 先用
info breakpoints或i b获取当前列表,再决定删哪个 - 用
delete 1-5比delete 3更安全——只要你知道最多设了 5 个 - 如果目标是“删掉所有旧断点再设新的”,直接
delete+ 新break最省事
编号会因 delete 或 clear 动态变化,依赖具体数字的脚本容易失效。











