continue是唯一能恢复执行并停在下一个断点的命令;run会重启程序,next仅单步执行;多断点时按实际执行流命中,非编号顺序;无启用断点或程序阻塞会导致无响应。

continue 是让程序继续运行直到下一个断点或程序结束的命令。
为什么不用 run 或 next
很多人误以为 run(简写 r)能“继续”执行,其实它会重启整个程序,丢弃当前上下文;而 next(n)只是单步执行一行,不跳到断点。只有 continue(c)真正符合“继续跑到下一个断点”的语义。
-
run:从头开始执行,忽略当前暂停位置 -
next:逐行执行,遇到函数调用不进入,但不会自动停在断点 -
continue:恢复执行,GDB 自动监控断点命中,一触即停
continue 在多断点场景下的行为
当存在多个已启用断点时,continue 总是停在「下一个被命中」的断点,顺序由代码实际执行流决定,不是按断点编号大小。
- 断点被
disable后,continue会跳过它 - 条件断点(如
break 42 if i == 5)只在条件为真时触发,否则程序继续跑 - 如果所有断点都被
delete或clear,continue会直接运行到程序退出
容易被忽略的细节:程序卡住却不报错?
执行 continue 后程序没响应,常见原因不是命令错了,而是:
- 没有设置任何启用的断点(
info breakpoints看状态列是否为yes) - 断点设在了永远不会执行的分支(比如
if (0)里的行) - 程序进入了阻塞调用(如
read()、sleep()、死循环),此时它没遇到断点,只是在等事件 - 你忘了先用
run或start启动程序——continue只对已暂停的运行中进程有效
断点是否生效、在哪停、为何不停,得靠 info breakpoints 和实际执行路径交叉验证,不能只看命令输对没输对。











