用 code --extensions-dir 指向干净路径是深度插件调试前提,需将构建后的插件源码软链至该目录并符合 publisher.name-1.0.0 命名,再通过 launch.json 配置 pwa-node 类型调试器启动 extension development host 实例。

怎么用 code 命令启动带调试能力的 VSCode 实例
直接用 code --extensions-dir 指向一个干净、可写、不含空格的路径,是开启深度插件调试的前提。VSCode 默认不会加载你本地开发中的插件源码,它只认 package.json 存在且格式合法的子目录——所以调试前必须先确保插件已“物理存在”于该目录下。
- 推荐路径写法:
code --extensions-dir /tmp/vscode-debug-exts(macOS/Linux)或code --extensions-dir C:scode-debug-exts(Windows) - 不要用
~或%USERPROFILE%:这些符号在命令行中可能不被 shell 展开,导致路径实际无效 - 启动后立刻验证:按
Ctrl+Shift+P→ 输入Developer: Toggle Developer Tools→ 控制台执行require('path').resolve(require('os').homedir(), '.vscode', 'extensions'),输出必须和你传入的--extensions-dir一致
为什么插件代码改了但断点不触发
常见原因是 VSCode 没真正加载你正在编辑的插件源码,而是加载了缓存版本或另一个同名插件。调试插件必须手动把源码软链(或复制)进 --extensions-dir 指向的目录,并保证目录名符合 publisher.name-1.0.0 格式(哪怕没发版)。
- 正确做法:进入你的插件项目根目录,执行
npm install && npm run compile(或对应构建命令),然后ln -s $(pwd) /tmp/vscode-debug-exts/your-publisher.your-extension - 错误信号:打开命令面板搜不到你插件注册的命令,或
Developer: Show Extensions Folder打开的不是你指定的路径 - 关键检查项:目标扩展子目录下必须有
package.json和extension.js(或extension.ts编译后产物),缺一不可
launch.json 里怎么配插件调试入口
VSCode 插件本身是 Node.js 进程,调试它要用 type: "pwa-node",而不是 "python" 或 "chrome"。目标程序固定为 ./out/extension.js(假设你用 TypeScript + out 输出)。
- 必须设置
"runtimeExecutable": "${env:USERPROFILE}\AppData\Local\Programs\Microsoft VS Code\Code.exe"(Windows)或"runtimeExecutable": "/Applications/Visual Studio Code.app/Contents/MacOS/Electron"(macOS)——这是让调试器 attach 到真正的 VSCode 主进程 - 加
"args": ["--extensions-dir", "/tmp/vscode-debug-exts"],确保新启的子实例也走同一扩展路径 - 别漏
"console": "integratedTerminal",否则插件console.log会静默丢失
调试时插件报 Cannot find module 'vscode'
这不是路径问题,是模块解析失败。VSCode 的 vscode 模块是运行时注入的,仅在真实插件宿主环境中可用。你在普通 Node.js 环境下直接 node ./out/extension.js 必然报这个错。
- 唯一合法调试方式:通过
launch.json启动一个「插件开发环境」专用的 VSCode 实例(即 Extension Development Host),它会自动提供vscode全局变量 - 如果你看到这个错误,说明当前调试配置根本没走 Extension Development Host 流程,大概率是
type写成了node而非pwa-node,或runtimeExecutable指向了错的二进制 - 验证是否成功:调试启动后,在新窗口左下角状态栏应出现「Extension Development Host」字样
--extensions-dir 的命令行重新拉起,才能确保加载的是最新构建产物。











