Ctrl+Shift+F5(Windows/Linux)或 Cmd+Shift+F5(macOS)是 VSCode 中唯一官方支持的重启调试快捷键,精准终止当前调试会话并立即用原配置重新启动,等效于点击工具栏「重启」按钮,适用于所有语言和调试器类型。

VSCode 里没有“重新启动调试”的独立快捷键,但有明确、可靠的组合键直接实现该动作:Ctrl+Shift+F5(Windows/Linux)或 Cmd+Shift+F5(macOS)。它不是“重启 VSCode”,也不是“刷新窗口”,而是精准终止当前 debug session 并立即用相同配置重新启动调试器——等效于点击调试工具栏上的「重启」按钮。
Ctrl+Shift+F5 为什么是唯一推荐的快捷键
这个快捷键绑定的是 workbench.action.debug.restart 命令,它是 VSCode 官方定义的“重启当前调试会话”行为:
- 它不依赖语言或调试器类型(Node.js / Python / Go / Rust 都适用)
- 它会重置所有断点状态、变量作用域、调用栈,比手动停止再按 F5 更干净
- 它跳过 launch.json 二次确认流程,只要上次成功启动过,这次就直接复用配置
- 它不会触发窗口重载(
Developer: Reload Window是另一回事,和调试无关)
别把 F5 当“重启”用
F5 是启动调试,不是重启。如果当前已有运行中的调试会话,按 F5 的行为取决于你的设置:
- 默认情况下,VSCode 会弹出提示:“There is already a debug session running. Do you want to stop it and start a new one?”
- 如果你点了“Yes”,它才等效于 Ctrl+Shift+F5;但若你误点“No”或没注意提示,
F5就完全没反应 - 部分用户在
settings.json里设了"debug.allowBreakpointsEverywhere": true或自定义了debug.onTaskErrors,会让F5行为更不可预测
重启调试时容易被忽略的细节
真正影响调试体验的,往往不是快捷键本身,而是背后的状态残留:
- 断点不会自动恢复:如果上次调试中途禁用了某些断点,Ctrl+Shift+F5 后它们仍处于禁用状态,需手动启用
- 控制台日志不清空:调试控制台(Debug Console)内容不会因重启而消失——这是设计使然,历史输出保留在缓冲区,可滚动查看(见下方说明)
- 变量监视表达式(Watch)保留但值不刷新:已添加的 Watch 条目还在,但其求值结果仍是上一次暂停时的快照,需等到下一次暂停才更新
- 附加模式(attach)可能失败:如果调试目标进程已退出,Ctrl+Shift+F5 会报错
Cannot connect to runtime process,此时需先确保目标服务已拉起
调试控制台日志清屏 ≠ 重启调试
很多人想“清屏”才去按 Ctrl+Shift+F5,但这是误解:
- Ctrl+Shift+F5 确实会清空 Debug Console 的显示内容,但这是副作用,不是目的
- 它清的是“当前会话的输出流”,不是“历史缓冲区”——如果你滚动到底部,仍可能看到上一轮残留日志(尤其在 Python 的 IPython 风格 console 中)
- 真正需要清空全部日志并重来,唯一办法就是 Ctrl+Shift+F5;想搜索旧日志,请用右键 → “Save As…” 导出后查
复杂点在于:Ctrl+Shift+F5 解决的是“调试流程控制”,而 Debug Console 的日志管理、搜索、导出是另一套逻辑。两者常被混为一谈,但底层机制完全分离——按对快捷键只是第一步,后续是否能快速定位问题,还得看你怎么处理那堆滚动不停的输出。











