按F5启动调试时,VSCode实际运行launch.json中配置的调试目标,对插件开发而言是启动“Extension Development Host”新窗口并附加调试器,需配置type: "extensionHost",否则报“No configuration found to debug”。

VSCode 插件调试模式本身没有全局“开启/禁用”的快捷键——它依赖于你正在调试的目标(插件代码、Python 脚本、Node.js 扩展等),而对应的启动和控制行为由调试器决定,不是靠快捷键开关的。
调试插件时 F5 启动的是什么?
按 F5 启动调试时,VSCode 实际运行的是 launch.json 中配置的调试目标。对于插件开发(如 TypeScript 编写的 VS Code 扩展),它默认启动一个“Extension Development Host”窗口,并附加调试器到该子进程中。这不是“开启调试模式”,而是启动一个带调试能力的新 VS Code 实例。
- 必须已存在有效的
.vscode/launch.json,且配置了type: "extensionHost" - 若没配置或配置错误,
F5会报错:“No configuration found to debug”,而不是静默失败 - 调试器不会自动 attach 到当前主窗口;你看到的“新窗口”才是被调试对象
- 关闭该新窗口 ≠ 停止调试;需手动按
Shift+F5或点击调试工具栏的停止按钮
为什么禁用插件后调试仍能跑?
因为插件调试是独立进程:你调试的是源码(src/ 下的 TS 文件),不是已安装的插件包。即使你在主窗口里禁用了 my-extension,只要调试会话里加载的是本地源码,它就照常运行。
-
extensions.disabledExtensions只影响主窗口扩展加载,不影响launch.json中runtimeExecutable指向的调试实例 - 常见误操作:在主窗口禁用插件 → 立刻按
F5→ 发现插件功能还在 → 以为禁用失效 → 其实是调试环境绕过了禁用逻辑 - 想验证插件是否真被禁用,得关掉所有调试窗口,只开主窗口,再检查功能
真正影响插件调试行为的命令行参数
如果你要排除干扰、确认问题是来自插件本身还是其他扩展,--disable-extensions 是唯一可靠手段,但它不作用于调试会话内部,只作用于你手动启动的 VS Code 实例。
- 调试插件时,你想干净地测试“无其他插件干扰下的行为”,就得用:
code --disable-extensions ./my-extension,然后再按F5 -
--disable-extensions必须放在命令末尾,否则会被忽略;也不能和--extensions-dir同时用 - 不要试图在
launch.json的args里加这个参数——它对 extensionHost 类型无效,VS Code 不会把它透传给子窗口 - 如果需要在调试中临时禁用某个辅助插件(比如 Prettier 格式化干扰断点位置),应在工作区
.vscode/settings.json中写:"extensions.disabled": ["esbenp.prettier-vscode"]
调试插件最易被忽略的一点:你改了 package.json 或 activationEvents,但没重启调试窗口,新配置就不会生效;Developer: Reload Window 对调试中的 extension host 无效,必须停掉整个调试会话再重来。


















