vscode插件调试必须配置launch.json的type为extensionhost、request为launch、runtimeexecutable指向code可执行文件,并添加--extensiondevelopmentpath=${workspacefolder}参数;同时tsconfig.json需启用sourcemap、匹配outdir与launch.json的outfiles,activationevents设为["*"]确保activate执行,console.log日志需在devtools console中查看。

调试前必须确认的 launch.json 配置项
VSCode插件调试依赖 .vscode/launch.json 中的正确配置,缺一不可。很多人卡在“按 F5 没反应”或“Extension Development Host 启动后无响应”,根本原因常是 type、request 或 runtimeExecutable 值写错。
-
type必须为extensionHost(不是node或pwa-node) -
request必须为launch(不是attach) -
runtimeExecutable要指向你本地安装的 VSCode 可执行文件:Windows 是code.cmd,macOS 是code(需确保已添加到 PATH),Linux 通常是/usr/bin/code -
args中必须包含--extensionDevelopmentPath=${workspaceFolder},否则新插件不会加载
漏掉任一参数,调试器就无法挂载你的插件上下文,activate 函数压根不会执行。
断点不命中?检查 extension.ts 的编译与 sourcemap
TypeScript 插件调试失败,80% 出在源映射没对上。VSCode 调试器实际运行的是 out/extension.js,但你是在 src/extension.ts 打的断点——两者靠 sourceMap 关联。如果 tsconfig.json 里没开 "sourceMap": true,或者 "outDir" 和 launch.json 中的 outFiles 不匹配,断点就会变空心圆、灰色、不生效。
- 确认
tsconfig.json包含:"sourceMap": true、"outDir": "./out"、"rootDir": "./src" - 在
launch.json的outFiles字段中明确列出:["${workspaceFolder}/out/**/*.js"] - 每次改完
tsconfig.json后,删掉out/目录并重新运行tsc,不要依赖旧缓存
activate 函数没执行?看 activationEvents 和触发时机
插件启动不是“一打开编辑器就运行”,而是由 package.json 中的 activationEvents 控制。常见误区是以为 activate 会在调试启动时自动调用,其实它只在满足某个事件时才触发——比如用户手动执行命令、打开特定语言文件、或编辑器就绪后延迟激活。
- 最稳妥的调试起步方式:把
activationEvents设为["*"](开发期临时用),确保插件一加载就激活 - 若坚持用具体事件(如
"onCommand:myext.doSomething"),调试时必须先打开命令面板(Ctrl+Shift+P),输入并执行该命令,才能走到断点 - 注意
activationEvents是数组,不是字符串;写成"onCommand:xxx"(没包方括号)会导致整个字段被忽略
调试时 console.log 不显示?别只盯 Output 面板
插件中的 console.log 默认输出到“Developer Tools”控制台,不是 VSCode 底部的 “Output” 面板。新手常翻遍 Output 标签页找不到日志,其实是没打开开发者工具。
- 在 Extension Development Host 窗口中,按
Ctrl+Shift+I(Windows/Linux)或Cmd+Option+I(macOS)打开 DevTools - 切换到 Console 标签页,就能看到
console.log输出,包括错误堆栈和未捕获异常 - 如果想把日志也输出到 Output 面板,要用
vscode.window.createOutputChannel('MyExt')显式创建通道,并调用.appendLine()
DevTools 的 Console 是调试生命周期和异步行为最直接的观察窗口,跳过它等于蒙眼调试。











