vs code插件调试必须通过extension development host模式启动,根本原因是插件默认懒加载,activationevents未触发则插件不激活、断点不命中;需确保launch.json中"type"为"pwa-extensionhost"、"request"为"launch",且sourcemap启用、out目录已编译生成。

VS Code 插件调试不是“启动就断点”,而是必须先让插件进程真正加载并响应命令,否则断点永远不命中。
为什么 debug 按钮点了没反应?
常见现象是点击“运行和调试”里的绿色三角,控制台输出一堆日志,但你设的断点完全不触发,extension.js 里加的 console.log 也不打印。
- 根本原因:插件默认是懒加载的,
activationEvents配置没匹配当前操作,插件根本没被激活 - 典型错误配置:
"activationEvents": ["*"]被删了,或只留了"onCommand:xxx",但你还没手动执行那个命令 - 验证方法:在
extension.js的激活函数(如activate())第一行加console.log('activated'),看 Debug 控制台是否输出 - 临时解法:把
activationEvents改成["*"],确保一启动就加载;正式发布前再改回精准触发条件
launch.json 中 request 和 type 怎么选?
VS Code 插件调试本质是启动一个“Extension Development Host”实例,它本身也是个 VS Code 窗口,你的插件跑在里面。配置错类型,调试器连不到目标进程。
-
"type": "pwa-extensionhost"是唯一正确值(旧文档里写的extensionHost已弃用) -
"request": "launch"用于常规调试;若要附加到已运行的插件实例,才用"request": "attach",但极少需要 - 别手误写成
"type": "node"——那会去调试你本地的 Node 进程,跟插件无关 - 必须配
"runtimeExecutable"指向你的 VS Code 可执行文件路径,否则可能拉起错误版本(尤其 macOS/Linux 用户容易忽略)
断点不命中?先查这三处路径
即使插件激活了,断点也可能失效,90% 是源码映射或构建产物路径对不上。
-
out/目录没生成:确认你运行过npm run compile或启用了 TS 自动编译(tsc -w),launch.json的"program"默认指向./out/extension.js -
sourceMap关闭:tsconfig.json里必须有"sourceMap": true,且"outDir"与launch.json中路径一致 - 工作区路径含中文或空格:某些版本的
pwa-extensionhost调试器对这类路径解析异常,临时改到纯英文无空格路径下测试
调试时修改代码,为什么热更不生效?
VS Code 插件调试窗口不会自动重载你改完的代码,不像 Web 开发那样开箱即热更新。
- 保存后必须手动按
Ctrl+R(Windows/Linux)或Cmd+R(macOS)刷新 Extension Development Host 窗口 - 或者点击调试工具栏的
Restart按钮(循环箭头图标),它会重启整个 host 实例 - 注意:刷新后所有断点需重新绑定,且插件状态(如全局变量)会丢失——这不是 bug,是设计使然
- 如果频繁改代码+刷新,建议在
package.json的contributes.commands里加个“Reload Extension”命令,一键触发
最易被忽略的一点:调试器只认 out/ 下的 JS 文件,哪怕你在 src/ 里打了断点,背后实际停靠的是编译后的代码行。如果 tsconfig.json 里 "inlineSources": true 没开,就无法在源码上直接调试——你会看到断点落在空白行或错位行上。











