Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Отладка

У программы на Electron два вида кода, и отлаживают их по-разному. Страницу — инструментами разработчика Chromium (DevTools), как сайт. Главный процесс — как программу на Node.js: через вывод в терминал и отладчик, подключённый по флагу --inspect.

DevTools для страницы

Стандартное меню Electron содержит пункт View → Toggle Developer Tools, он же Ctrl+Shift+I (Cmd+Option+I на Mac). Если меню своё, DevTools можно открыть из кода:

// main.js
win.loadFile('index.html');
 
if (!app.isPackaged) {
  win.webContents.openDevTools();
}

app.isPackaged равен false при запуске через npm start и true в собранной программе. Так DevTools откроются только во время разработки. В них работают консоль, точки останова, вкладки Elements и Network.

Вывод главного процесса

console.log в main.js пишет в терминал, из которого запущена программа:

// main.js
ipcMain.handle('notes:save', async (event, notes) => {
  console.log('Сохраняю заметок:', notes.length);
  await saveNotes(notes);
});

При каждом сохранении в терминале появится строка с числом заметок. Необработанные ошибки главного процесса тоже выводятся там.

Отладчик главного процесса

Чтобы ставить точки останова в main.js, запустите Electron с флагом --inspect. Добавьте скрипт в package.json:

{
  "scripts": {
    "start": "electron .",
    "debug": "electron --inspect=5858 ."
  }
}

Выполните npm run debug, откройте в Chrome адрес chrome://inspect и в разделе Remote Target нажмите inspect — откроются DevTools главного процесса.

Отладка в VS Code

VS Code может запускать Electron сам. Создайте файл .vscode/launch.json:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Electron: main",
      "type": "node",
      "request": "launch",
      "cwd": "${workspaceFolder}",
      "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
      "windows": {
        "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron.cmd"
      },
      "args": ["."]
    }
  ]
}

Нажмите F5 — программа запустится, а точки останова в main.js будут срабатывать прямо в редакторе.

Падение страницы

Если процесс отрисовки упадёт, окно станет белым, а главный процесс получит событие:

// main.js
win.webContents.on('render-process-gone', (event, details) => {
  console.log('Страница упала:', details.reason);
});

details.reason объясняет причину, например 'crashed' или 'oom' (нехватка памяти). Окно после этого можно перезагрузить методом win.reload().

Частая ошибка

Новички ищут вывод console.log из main.js в DevTools окна и не находят его. DevTools показывают только процесс отрисовки и preload. Сообщения главного процесса смотрите в терминале, где выполнена команда npm start.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.