F10/F11 无响应是因为调试上下文未建立:需先通过 F5 启动调试(依赖 launch.json 配置、正确解释器、source map 等),断点命中后才生效;空心断点或配置错误会导致单步失效。

按 F10 或 F11 不能单步“中断”,它们只在调试会话已启动且处于暂停状态时才生效。直接运行代码不设断点、没按 F5 启动调试,这两个键完全没反应。
为什么 F10/F11 按了没反应?
常见错误现象是:代码里打了断点,也按了 F5,但光标一到断点就直接跑完、根本停不住,或者 F10/F11 键无响应。这不是快捷键坏了,而是调试上下文没建立成功:
-
F5必须触发一次完整的调试启动流程,不是“运行代码”——它依赖.vscode/launch.json存在且program字段指向可执行文件(如./dist/index.js,不是src/index.ts) - Python 项目若未在底部状态栏选对解释器,
F5可能静默失败,表面看像没反应,实际是调试进程根本没起来 - TypeScript 项目没配
"preLaunchTask": "tsc: build - tsconfig.json",断点打在.ts文件上,但调试器只加载.js,断点变空心圆,后续所有单步操作都失效
F10 是跳过,F11 是进入:别混淆执行意图
这两键行为差异直接影响你能不能看到函数内部逻辑。关键不在“快慢”,而在“是否钻进去”:
-
F10(Step Over):执行当前行,遇到函数调用(比如fetch()、user.save())不进函数体,直接跳到下一行。适合确认“这行有没有副作用”,但看不到函数内部怎么走 -
F11(Step Into):遇到函数调用就跳转到该函数第一行(前提是符号可用)。但如果函数来自node_modules或被 Webpack 内联,可能直接跳过——这时得检查launch.json里的"skipFiles"是否误把目标路径加进去了 - 异步场景下,
F10遇到await api.get()会直接跳到await下一行,不会等 resolve;想停在回调里,断点得设在async函数内部,或await行本身
真正能“中断执行流”的只有三类操作
单步调试的本质是控制暂停时机,不是机械地逐行走。以下操作才能让代码在预期位置停下:
- 在行号区点击设断点(
F9),然后按F5启动:这是最稳的中断方式,不受语言或运行时限制 - 右键断点 → Edit Breakpoint 设条件,比如
user.id === 123,避免在无关数据上反复中断 - 用日志点(Log Point)替代
console.log:右键断点选 Add Log Point,输入"req: {req.url}",调试时不暂停、只输出,减少打断节奏
最容易被忽略的是:F10 和 F11 的有效性完全依赖断点是否命中。如果断点是空心圆、调试控制台报 Breakpoint ignored because generated code not found,再熟的快捷键也没用——先解决 source map 路径或编译输出配置,比背快捷键重要得多。


















