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

VSCode 调试 Electron 桌面应用必须拆成主进程和渲染进程两套独立配置,缺一不可——只配一个,断点必然失效;顺序错乱,DevTools 打不开或白屏。
主进程断点不生效?检查 --inspect 参数位置和 runtimeExecutable
Electron 12+ 默认忽略调试协议,electron . 启动时不会暴露 V8 inspector 接口。VSCode 的 node 类型调试器无法自动 attach,必须显式注入参数。
-
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和outFiles路径匹配,否则断点会落在转译后代码上
渲染进程 DevTools 打不开或断点无效?别信 file:// 自动映射
渲染进程本质是 Chromium 页面,VSCode 必须通过 Chrome Debug Protocol 连接,type 必须是 pwa-chrome(不是 chrome 或 node),且不能依赖 file:// 协议自动解析源码路径。
- 代码里必须调用
win.webContents.openDevTools({ mode: 'detach' }),且放在'ready-to-show'事件之后,避免窗口未就绪时触发报错 -
launch.json中url字段推荐用http://localhost:3000(对应 vite dev server),而非file://;若坚持用file://,必须配webRoot: "${workspaceFolder}/src",否则断点找不到源文件 - 确保没加
--disable-features=OutOfBlinkCors等调试干扰 flag,这类参数会让 DevTools 加载失败或网络面板空白 - React/Vue 组件调试需额外安装对应 DevTools:用
electron-devtools-installer,且installExtension必须在app.whenReady()之后调用
双进程一起调试?两个 launch 配置 + 手动节奏控制
VSCode 不支持单条配置同时 attach 主进程和渲染进程。强行合并会导致端口冲突、子窗口无断点、或调试器反复重连。
- 建两个独立配置,
name明确区分:"Debug Main Process"和"Debug Renderer Process" - 先运行主进程调试(F5),等控制台输出
App ready或主窗口弹出后再手动启动渲染进程调试配置 - 主进程配置加
"console": "integratedTerminal",方便观察日志触发时机;渲染进程配置加"autoAttachChildProcesses": true,否则新建BrowserWindow实例无法被捕获 - 若用
contextIsolation: true(强烈推荐),preload.js 中的ipcRenderer必须通过contextBridge.exposeInMainWorld暴露,否则渲染进程调试器里查不到该对象
最常被忽略的是 Node.js 版本兼容性:Electron ≥38.1.2 要求 Node.js 严格落在 v18.15.0–v20.14.0 区间,v22+ 直接报 ERR_MODULE_NOT_FOUND,v16 则因 DEP0148 导致 IPC 失效——这个错误不会报在控制台,只会让 ipcRenderer.invoke 静默失败。











