vscode调试electron必须分主、渲染进程两套独立配置:主进程用node类型attach模式,--inspect=9229须在args中位于"."之前,runtimeexecutable指向本地electron二进制;渲染进程用pwa-chrome类型attach,需opendevtools()置于'ready-to-show'后并配webroot或http服务地址,且node.js须为v20.14.0、electron≥38.1.2。

VSCode 调试 Electron 必须分主进程和渲染进程两套独立配置,缺一不可——只配一个,断点全灰;顺序或参数错一点,ipcRenderer报错、openDevTools()白屏、窗口卡死都是常态。
主进程断点不生效?检查 --inspect 位置和 runtimeExecutable
Electron 12+ 默认禁用 V8 Inspector,electron . 启动后根本不会暴露调试端口。VSCode 的 node 类型调试器只能 attach,不能自动注入协议。
-
--inspect=9229必须写在args数组里"."的前面,例如["--inspect=9229", "."];写成[".", "--inspect=9229"]会被 Electron 完全忽略 -
runtimeExecutable必须指向项目本地的 Electron 二进制:${workspaceFolder}/node_modules/.bin/electron(macOS/Linux)或${workspaceFolder}/node_modules/.bin/electron.cmd(Windows),不能用全局electron命令 - 加
"env": { "ELECTRON_ENABLE_LOGGING": "true" },终端立刻输出窗口创建、IPC 注册等日志,比等断点快得多 - 若用 TypeScript 或
electron-vite,确保sourceMaps: true,并配outFiles: ["${workspaceFolder}/dist/main.js"]
渲染进程 DevTools 打不开或断点无效?别信 file:// 自动映射
渲染进程本质是 Chromium 页面,VSCode 必须通过 Chrome Debug Protocol 连接,type 必须是 pwa-chrome(VSCode 1.85+ 推荐),不是 chrome 或 node。
- 代码里必须调用
win.webContents.openDevTools({ mode: 'detach' }),且放在'ready-to-show'事件之后,否则窗口未就绪会报错 -
launch.json中url字段推荐用http://localhost:3000(对应 vite dev server),而非file://;若坚持用file://,必须配webRoot: "${workspaceFolder}/src",否则断点找不到源文件 - 启动后访问
http://localhost:9222/json,能列出渲染页说明--remote-debugging-port=9222已生效;返回空或 404 表示端口未开或被占用 - 避免加
--disable-features=OutOfBlinkCors等干扰 flag,这类参数会让 DevTools 加载失败或网络面板空白
双进程一起调试?两个 launch 配置 + 手动节奏控制
VSCode 不支持单条配置同时 attach 主进程和渲染进程。强行合并会导致端口冲突、子窗口无断点、调试器反复重连。
- 定义两个独立配置:一个
type: "node"(主进程,request: "attach",port: 9229),一个type: "pwa-chrome"(渲染进程,port: 9222) - 推荐顺序:先运行主进程 debug(F5),等控制台输出 “App ready” 或窗口弹出后,再运行渲染进程 debug
- 两个配置的
name要区分清楚,比如"Debug Main Process"和"Debug Renderer Process" - 主进程配置里加
"console": "integratedTerminal",方便观察日志触发时机
最容易被忽略的是 Node.js 和 Electron 版本匹配问题:当前最稳组合是 Node.js v20.14.0 + Electron ≥38.1.2;v22+ 会直接触发 ERR_MODULE_NOT_FOUND,v16 或更早则报 DEP0148 并让 IPC 失效。











