Débogage et résolution des problèmes courants d'Electron
  Lorsque votre application Electron plante, se fige ou consomme une mémoire excessive, identifier rapidement la cause profonde est essentiel. Ce guide fournit des techniques de débogage pratiques pour les problèmes Electron les plus courants, en se concentrant sur ce qu’il faut vérifier en premier et quels outils utiliser.
Points clés à retenir
- Commencez le débogage des plantages du renderer en ouvrant DevTools par programmation et en vérifiant les exceptions non capturées
 - Configurez VS Code correctement pour le débogage du processus principal avec les bons paramètres launch.json
 - Prévenez les fuites mémoire en nettoyant les listeners IPC et en surveillant à la fois la mémoire RSS et heap
 - Désactivez toujours DevTools et les fonctionnalités de débogage dans les builds de production en utilisant les vérifications app.isPackaged
 
Diagnostic des plantages et blocages du processus Renderer
Vérifications rapides pour les problèmes de Renderer
Lorsqu’un processus renderer plante ou ne répond plus, commencez par ces vérifications immédiates :
- Ouvrez DevTools par programmation avant que le plantage ne se produise :
 
win.webContents.openDevTools({ mode: 'detach' });
- 
Vérifiez la console pour les exceptions non capturées - La plupart des plantages de renderer proviennent d’erreurs JavaScript non gérées.
 - 
Surveillez l’utilisation de la mémoire via l’onglet Performance de Chrome DevTools - Recherchez les pics de mémoire avant les plantages.
 
Débogage du processus Renderer avec DevTools
Pour les problèmes persistants du renderer :
- Activez le rapport de plantage : Ajoutez 
win.webContents.on('crashed', (event) => {})pour capturer les événements de plantage - Utilisez les snapshots mémoire : Prenez des instantanés du heap dans DevTools (onglet Memory) pour identifier les objets qui fuient
 - Désactivez l’accélération matérielle pour les tests : 
app.disableHardwareAcceleration()- élimine les plantages liés au GPU 
Vérification rapide : Si le problème disparaît avec l’accélération matérielle désactivée, vous avez isolé un problème GPU.
Débogage des problèmes du processus principal
Configuration du débogage Electron dans VS Code
Configurez VS Code pour le débogage du processus principal avec ce fichier launch.json minimal :
{
  "type": "node",
  "request": "launch",
  "name": "Debug Main Process",
  "runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron",
  "program": "${workspaceFolder}/main.js",
  "outputCapture": "std"
}
Résolution des problèmes du processus principal
Premières étapes pour les problèmes du processus principal :
- Vérifiez stdout/stderr : Ajoutez 
"outputCapture": "std"pour voir les erreurs des modules natifs - Définissez des points d’arrêt dans les événements de cycle de vie (
app.on('ready'),app.on('before-quit')) - Surveillez la mémoire du processus : Utilisez 
process.memoryUsage()pour enregistrer les valeurs RSS 
Approches de remédiation :
- Pour un RSS élevé : Vérifiez les références BrowserWindow conservées - assurez-vous d’avoir 
win = nullaprès la fermeture - Pour les plantages : Activez les core dumps avec 
app.setPath('crashDumps', path) - Pour les blocages : Profilez l’utilisation du CPU avec le flag 
--inspectet Chrome DevTools 
Discover how at OpenReplay.com.
Fuites mémoire et RSS élevé
Techniques de profilage mémoire Electron
Identifiez les fuites mémoire de manière systématique :
- Comparez les snapshots du heap : Prenez des instantanés avant et après les opérations suspectées de fuite
 - Surveillez RSS vs heap : RSS inclut la mémoire native - si RSS augmente mais pas le heap, vérifiez les modules natifs
 - Suivez les listeners IPC : Les listeners non désenregistrés sont des sources courantes de fuites
 
Prévention des fuites de listeners IPC
Pattern courant de fuite mémoire IPC :
// MAUVAIS : Crée un nouveau listener à chaque render
ipcRenderer.on('data-update', handler);
// BON : Supprimez lors du démontage
const handler = (event, data) => { /* ... */ };
ipcRenderer.on('data-update', handler);
// Lors du nettoyage :
ipcRenderer.removeListener('data-update', handler);
Vérification : Vérifiez le nombre de listeners avec ipcRenderer.listenerCount('event-name')
Problèmes de configuration et de sécurité
Prévention de l’exposition du mode debug
Vérifications critiques en production :
- Désactivez DevTools en production :
 
if (app.isPackaged) {
  win.webContents.on('devtools-opened', () => {
    win.webContents.closeDevTools();
  });
}
- Supprimez les éléments de menu de débogage : Retirez les options de débogage des menus de production
 - Désactivez le module remote : Définissez 
enableRemoteModule: falsedans webPreferences 
Quand escalader
Créez une reproduction minimale avant de signaler des problèmes :
- Isolez le problème : Supprimez tout le code non essentiel
 - Testez avec Electron vanilla : Utilisez minimal-repro comme référence
 - Documentez précisément : Incluez les chiffres exacts RSS/heap, la version d’Electron et la plateforme
 
Lors du signalement de problèmes Electron/Chromium, fournissez :
- Code minimal reproductible
 - Mesures de mémoire (RSS et heap)
 - Type de processus affecté (main/renderer)
 - Crash dumps si disponibles
 
Bonnes pratiques
Trois pratiques de débogage essentielles
- 
Sécurisez les builds de production : Vérifiez toujours
app.isPackagedavant d’activer les fonctionnalités de débogage. Ne livrez jamais avec DevTools accessible. - 
Nettoyez les listeners IPC : Implémentez un pattern de nettoyage pour tous les listeners IPC. Utilisez
removeListener()ouremoveAllListeners()lors du démontage du composant. - 
Surveillez RSS en parallèle du heap : Les snapshots du heap JavaScript ne montrent pas la mémoire native. Suivez toujours
process.memoryUsage().rsspour une investigation mémoire complète. 
Conseil final : Pour des scénarios de débogage complexes, utilisez electron-debug pour ajouter des raccourcis DevTools et d’autres fonctionnalités de débogage avec une configuration minimale.
Conclusion
Le débogage des applications Electron nécessite une approche systématique pour identifier si les problèmes proviennent du processus principal ou du renderer. En utilisant les bons outils—de DevTools pour les problèmes de renderer au débogage VS Code pour les problèmes du processus principal—vous pouvez rapidement isoler et corriger les plantages, fuites mémoire et problèmes de performance. N’oubliez pas de toujours sécuriser vos builds de production et de maintenir des patterns de communication IPC propres pour éviter que les problèmes courants ne se produisent en premier lieu.
FAQ
Les applications Electron incluent un navigateur Chromium complet et un runtime Node.js pour chaque fenêtre. Cette surcharge de base signifie que même les applications simples utilisent 50-100 Mo. Surveillez à la fois la mémoire heap et RSS pour distinguer entre la mémoire JavaScript et l'utilisation des modules natifs.
Démarrez Electron avec le flag --enable-logging pour capturer les erreurs précoces. Ajoutez des instructions console.log au début de votre fichier de processus principal. Si vous utilisez des modules natifs, vérifiez qu'ils correspondent à votre version d'Electron avec electron-rebuild.
Le processus principal exécute le code Node.js et gère le cycle de vie de l'application. Déboguez-le avec VS Code ou le flag --inspect. Le processus renderer exécute le contenu web et utilise Chrome DevTools. Chacun nécessite des outils et approches de débogage différents.
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.