Debugging e Resolução de Problemas Comuns do Electron
  Quando sua aplicação Electron trava, congela ou consome memória excessiva, encontrar a causa raiz rapidamente é fundamental. Este guia fornece técnicas práticas de debugging para os problemas mais comuns do Electron, focando no que verificar primeiro e quais ferramentas usar.
Principais Conclusões
- Comece a depurar crashes do renderer abrindo o DevTools programaticamente e verificando exceções não capturadas
 - Configure o VS Code adequadamente para debugging do processo principal com as configurações corretas no launch.json
 - Previna vazamentos de memória limpando listeners IPC e monitorando tanto a memória RSS quanto heap
 - Sempre desabilite o DevTools e recursos de debug em builds de produção usando verificações app.isPackaged
 
Diagnosticando Crashes e Travamentos do Processo Renderer
Verificações Rápidas para Problemas do Renderer
Quando um processo renderer trava ou fica sem resposta, comece com estas verificações imediatas:
- Abra o DevTools programaticamente antes que o crash ocorra:
 
win.webContents.openDevTools({ mode: 'detach' });
- 
Verifique o console para exceções não capturadas - A maioria dos crashes do renderer se origina de erros JavaScript não tratados.
 - 
Monitore o uso de memória através da aba Performance do Chrome DevTools - Procure por picos de memória antes dos crashes.
 
Debugging do Processo Renderer com DevTools
Para problemas persistentes no renderer:
- Habilite relatórios de crash: Adicione 
win.webContents.on('crashed', (event) => {})para capturar eventos de crash - Use snapshots de memória: Tire heap snapshots no DevTools (aba Memory) para identificar objetos com vazamento
 - Desabilite a aceleração de hardware para testes: 
app.disableHardwareAcceleration()- elimina crashes relacionados à GPU 
Verificação rápida: Se o problema desaparecer com a aceleração de hardware desabilitada, você isolou um problema de GPU.
Debugging de Problemas do Processo Principal
Configuração de Debugging do Electron no VS Code
Configure o VS Code para debugging do processo principal com este launch.json mínimo:
{
  "type": "node",
  "request": "launch",
  "name": "Debug Main Process",
  "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
  "program": "${workspaceFolder}/main.js",
  "outputCapture": "std"
}
Resolução de Problemas do Processo Principal
Primeiros passos para problemas do processo principal:
- Verifique stdout/stderr: Adicione 
"outputCapture": "std"para ver erros de módulos nativos - Defina breakpoints em eventos de ciclo de vida (
app.on('ready'),app.on('before-quit')) - Monitore a memória do processo: Use 
process.memoryUsage()para registrar valores RSS 
Abordagens de correção:
- Para RSS alto: Verifique referências retidas de BrowserWindow - garanta 
win = nullapós fechar - Para crashes: Habilite core dumps com 
app.setPath('crashDumps', path) - Para travamentos: Faça profile do uso de CPU com a flag 
--inspecte Chrome DevTools 
Discover how at OpenReplay.com.
Vazamentos de Memória e RSS Alto
Técnicas de Profiling de Memória no Electron
Identifique vazamentos de memória sistematicamente:
- Compare heap snapshots: Tire snapshots antes e depois de operações suspeitas de vazamento
 - Monitore RSS vs heap: RSS inclui memória nativa - se RSS crescer mas heap não, verifique módulos nativos
 - Rastreie listeners IPC: Listeners não registrados são fontes comuns de vazamento
 
Prevenção de Vazamento de Listeners IPC
Padrão comum de vazamento de memória IPC:
// RUIM: Cria novo listener a cada render
ipcRenderer.on('data-update', handler);
// BOM: Remove ao desmontar
const handler = (event, data) => { /* ... */ };
ipcRenderer.on('data-update', handler);
// Na limpeza:
ipcRenderer.removeListener('data-update', handler);
Verificação: Verifique a contagem de listeners com ipcRenderer.listenerCount('event-name')
Problemas de Configuração e Segurança
Prevenção de Exposição do Modo Debug
Verificações críticas de produção:
- Desabilite o DevTools em produção:
 
if (app.isPackaged) {
  win.webContents.on('devtools-opened', () => {
    win.webContents.closeDevTools();
  });
}
- Remova itens de menu de debug: Remova opções de debug dos menus de produção
 - Desabilite o módulo remote: Defina 
enableRemoteModule: falseem webPreferences 
Quando Escalar
Crie uma reprodução mínima antes de registrar problemas:
- Isole o problema: Remova todo código não essencial
 - Teste com Electron vanilla: Use minimal-repro como baseline
 - Documente precisamente: Inclua números exatos de RSS/heap, versão do Electron e plataforma
 
Ao registrar problemas no Electron/Chromium, forneça:
- Código mínimo reproduzível
 - Medições de memória (RSS e heap)
 - Tipo de processo afetado (main/renderer)
 - Crash dumps se disponíveis
 
Melhores Práticas
Três Práticas Essenciais de Debugging
- 
Proteja builds de produção: Sempre verifique
app.isPackagedantes de habilitar recursos de debug. Nunca distribua com DevTools acessível. - 
Limpe listeners IPC: Implemente um padrão de limpeza para todos os listeners IPC. Use
removeListener()ouremoveAllListeners()ao desmontar componentes. - 
Monitore RSS junto com heap: Heap snapshots JavaScript não mostram memória nativa. Sempre rastreie
process.memoryUsage().rsspara investigação completa de memória. 
Dica final: Para cenários complexos de debugging, use electron-debug para adicionar atalhos do DevTools e outros recursos de debugging com configuração mínima.
Conclusão
Depurar aplicações Electron requer uma abordagem sistemática para identificar se os problemas se originam no processo principal ou renderer. Ao usar as ferramentas certas—desde DevTools para problemas do renderer até debugging no VS Code para problemas do processo principal—você pode rapidamente isolar e corrigir crashes, vazamentos de memória e problemas de performance. Lembre-se de sempre proteger seus builds de produção e manter padrões limpos de comunicação IPC para prevenir que problemas comuns ocorram em primeiro lugar.
Perguntas Frequentes
Aplicações Electron incluem um navegador Chromium completo e runtime Node.js para cada janela. Esta sobrecarga base significa que até aplicações simples usam 50-100MB. Monitore tanto a memória heap quanto RSS para distinguir entre memória JavaScript e uso de módulos nativos.
Inicie o Electron com a flag --enable-logging para capturar erros iniciais. Adicione declarações console.log no início do seu arquivo de processo principal. Se usar módulos nativos, verifique se eles correspondem à sua versão do Electron com electron-rebuild.
O processo principal executa código Node.js e gerencia o ciclo de vida da aplicação. Depure-o com VS Code ou flag --inspect. O processo renderer executa conteúdo web e usa Chrome DevTools. Cada um requer ferramentas e abordagens de debugging diferentes.
Gain Debugging Superpowers
Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers. Check our GitHub repo and join the thousands of developers in our community.