continue(或c)命令用于从当前暂停点恢复程序执行,直到下一个启用的断点、信号或程序结束;它不重置状态、不跳过已禁用断点,且需确认断点启用、程序确为stopped状态及符号表匹配。

用 continue(或简写 c)命令继续执行被暂停的程序,这是最直接、最常用的方式。 其他命令如 next、step 是单步执行,不是“继续运行到下一个暂停点”,别混淆。
什么时候该用 continue 而不是 next 或 step
当你已经停在断点、信号、观察点等位置,只想让程序恢复运行、直到遇到下一个停止点(比如下一个断点)或自然结束时,就该用 continue。而 next 和 step 是逐行推进:前者跳过函数调用,后者会钻进函数内部——它们不“继续”,只“走一步”。
- 你刚用
break main启动程序,停在main开头,想直接跑到下一个断点?→ 用c - 你在函数里单步调试卡住了,想跳出当前上下文继续跑?→ 别连按
n,改用c - 程序因
SIGSEGV被 gdb 拦下,你想让它继续触发默认行为(崩溃退出)?→c即可,无需额外处理
continue 的实际行为和常见误解
continue 不是“从头再跑”,而是从当前暂停位置恢复执行。它会忽略所有已被禁用(disable)的断点,但对启用状态的断点照常响应。如果当前没有其他断点,程序就一路跑到退出。
- 若你用
ignore 1 5忽略了断点 1 的前 5 次命中,那第 6 次c仍会在此断点停下 - 如果程序正在等待输入(比如
fgets),c后控制权会交还给终端,你需要手动输入回车才能继续 -
continue不重置变量或内存状态——上一步看到的val是什么,下一步接着用什么
恢复执行前容易漏掉的关键检查
继续之前,建议快速确认三件事,否则可能“继续”到意料之外的地方:
- 用
info break看还有哪些断点处于enabled状态;误留的断点会让程序突然又停住 - 用
info program确认程序确实处于stopped状态;如果显示running,说明它根本没被 gdb 控制住(比如是子进程或 detach 了) - 如果你改过源码又没重新编译,
list可能显示错行,c仍按旧符号表跳转——此时要file ./a.out重新加载,或干脆重启 gdb
真正麻烦的不是记不住 c,而是忘了断点还开着、程序其实卡在 IO 上、或者符号表早就不匹配了。这些地方一不留神,continue 就成了“为什么又停了”的起点。


















