禁用断点用disable命令,可保留编号、位置和条件,支持单个(disable 1)、多个(disable 2 5 7)、范围(disable 3-8)及全部(disable)禁用;delete则永久删除不可逆,enable恢复启用,enableonce仅触发一次。

临时禁用断点不用删,用 disable 命令就行——它只是让断点失效,编号、位置、条件全保留,随时能 enable 恢复。
怎么禁用单个或多个断点
禁用操作直接作用于断点编号,不改源码、不重启调试会话:
-
disable 1:禁用编号为 1 的断点,info break中该断点的Enb列会从y变成n -
disable 2 5 7:一次禁用多个指定编号的断点 -
disable 3-8:禁用编号 3 到 8(含)之间所有断点 -
disable(不带参数):禁用当前会话中所有断点
注意:disable 不影响观察断点(watch)和捕捉断点(catch),它们也统一归在 info break 输出里,同样支持编号禁用。
为什么不用 delete 而选 disable
删除断点(delete 1)是不可逆操作——断点没了,编号空缺,后续新设断点不会重用这个编号,而是继续递增;而禁用后断点还在列表里,条件、命中次数、地址都原样保留:
- 调试中途想跳过某处逻辑但又不确定是否还要回来查,禁用比删更安全
- 多个断点配合使用时(比如主流程断点 + 异常路径断点),禁用部分可快速切换关注焦点
- 条件断点(如
break 42 if x == -1)一旦删掉,条件表达式就丢了,重新设置容易漏写或写错
enable 和 enableonce 的区别
恢复断点不止一种方式:
-
enable 1:让断点回到启用状态,每次运行到该位置都会停 -
enableonce 1:只启用一次,命中后自动禁用——适合“我想看这一次变量值,之后别再打断”的场景 -
enable 4-6:批量启用一段编号范围,和disable对称,但不能混用(比如enableonce 4-6不合法)
执行 enable 后记得用 info break 确认 Enb 列是否已变回 y,尤其在脚本化调试或快速连敲命令时,容易误判状态。
容易忽略的细节:禁用后 run 行为变化
禁用全部断点后执行 r,程序会直接跑完(除非遇到信号或崩溃);但只要还有一个 Enb 是 y 的断点,r 就仍会在第一个启用断点处停下。这点在多线程调试中特别关键——你可能禁用了主线程的断点,却忘了某个工作线程还有启用中的 watch,结果程序还是停了,让人误以为禁用没生效。











