Avant dâécrire un code plus complexe, parlons de débogage.
Le Debugging est le processus de recherche et de correction des erreurs dans un script. Tous les navigateurs modernes et la plupart des autres environnements prennent en charge les outils de débogage â une interface utilisateur spéciale dans les outils de développement facilitant grandement le débogage. Cela permet également de tracer le code étape par étape pour voir ce qui se passe exactement.
Nous allons utiliser Chrome ici, car il possède suffisamment de fonctionnalités, la plupart des autres navigateurs utilisent un processus similaire.
Le volet âSourcesâ
Votre version de Chrome peut sembler un peu différente, mais vous devez tout de même savoir ce qui est là .
- Ouvrez la page dâexemple dans Chrome.
- Activer les outils de développement avec F12 (Mac: Cmd+Opt+I).
- Séléctionner le volet
Sources.
Voici ce que vous devriez voir si vous le faites pour la première fois :
Le bouton ouvre le volet avec les fichiers.
Cliquez dessus et sélectionnez hello.js dans lâarborescence. Voici ce qui devrait apparaître :
Ici nous pouvons voir 3 parties :
- Le volet explorateur de fichiers répertorie les fichiers HTML, JavaScript, CSS et autres fichiers, y compris les images jointes à la page. Des extensions Chrome peuvent également apparaître ici.
- Le volet Editeur de Code affiche le code source.
- Le volet Débugueur JavaScript est pour le débogage, nous lâexplorerons bientôt.
Maintenant, vous pouvez cliquer sur le même bouton à nouveau pour masquer la liste des ressources et laisser un peu dâespace au code.
Console
Si nous appuyons sur Esc, une console sâouvre ci-dessous. Nous pouvons taper des commandes ici et appuyer sur Entrée pour les exécuter.
Une fois une instruction exécutée, son résultat est présenté ci-dessous.
Par exemple, ici 1+2 donne 3, tandis que lâappel de fonction hello("debugger") ne renvoie rien, donc le résultat est undefined :
Breakpoints
Examinons ce qui se passe dans le code de la page dâexemple. Dans hello.js, cliquez sur le numéro de ligne 4. Oui, sur le chiffre 4, pas sur le code.
Félicitations ! Vous avez défini un point dâarrêt. Veuillez également cliquer sur le numéro correspondant à la ligne 8.
Cela devrait ressembler à ceci (le bleu est lâendroit où vous devez cliquer) :
Un breakpoint est un point dans le code où le débogueur mettra automatiquement en pause lâexécution de JavaScript.
Pendant que le code est en pause, nous pouvons examiner les variables actuelles, exécuter des commandes dans la console, etc. En dâautres termes, nous pouvons le déboguer.
Nous pouvons toujours trouver une liste de points dâarrêt dans le volet de droite. Câest utile lorsque nous avons plusieurs points dâarrêt dans divers fichiers. Ãa nous permet de :
- Sauter rapidement au point dâarrêt dans le code (en cliquant dessus dans le volet de droite).
- Désactiver temporairement le point dâarrêt en le décochant.
- Supprimer le point dâarrêt en cliquant avec le bouton droit de la souris et en sélectionnant Supprimer.
- ⦠Et ainsi de suite.
Clic droit sur le numéro de ligne permet de créer un point dâarrêt conditionnel. Il ne se déclenche que lorsque lâexpression donnée, que vous devez fournir lors de sa création, est vraie.
Câest pratique lorsque nous devons nous arrêter uniquement pour une certaine valeur de variable ou pour certains paramètres de fonction.
La commande âdebuggerâ
Nous pouvons également suspendre le code en utilisant la commande debugger, comme ceci :
function hello(name) {
let phrase = `Hello, ${name}!`;
debugger; // <-- le débogueur s'arrête ici
say(phrase);
}
Une telle commande ne fonctionne que lorsque les outils de développement sont ouverts, sinon le navigateur lâignore.
Pause et regarder autour
Dans notre exemple, hello() est appelé lors du chargement de la page, donc le moyen le plus simple dâactiver le débogueur (après avoir défini les points dâarrêt) est de recharger la page. Appuyez donc sur F5 (Windows, Linux) ou sur Cmd+R (Mac).
Lorsque le point dâarrêt est défini, lâexécution sâinterrompt à la 4ème ligne :
Veuillez ouvrir les menus déroulants dâinformation à droite (indiqués par des flèches). Ils vous permettent dâexaminer lâétat du code actuel :
-
Watchâ affiche les valeurs actuelles pour toutes les expressions.Vous pouvez cliquer sur le plus
+et saisir une expression. Le débogueur affichera sa valeur, la recalculant automatiquement dans le processus dâexécution. -
Call Stackâ affiche la chaîne des appels imbriqués.à ce moment précis, le débogueur se trouve dans lâappel
hello(), appelé par un script dansindex.html(aucune fonction nâest appelée, elle est donc appelée âanonymeâ).Si vous cliquez sur un élément de la pile (ex: âanonymousâ), le débogueur passe au code correspondant, et toutes ses variables peuvent également être examinées.
-
Scopeâ variables actuelles.Localaffiche les variables de fonction locales. Vous pouvez également voir leurs valeurs surlignées directement sur la source.Globala des variables globales (en dehors de toutes fonctions).Il y a aussi le mot-clé
thisque nous nâavons pas encore étudié, mais nous le ferons bientôt.
Tracer lâexécution
Il est maintenant temps de tracer le script.
Il y a des boutons pour cela en haut du volet de droite. Actionnons-les.
- â âReprendreâ : continue lâexécution, raccourci clavier F8.
-
Reprend lâexécution. Sâil nây a pas de points dâarrêt supplémentaires, lâexécution continue et le débogueur perd le contrôle.
Voici ce que nous pouvons voir après un clic dessus :
Lâexécution a repris, atteint un autre point dâarrêt à lâintérieur de
say()et sây est arrêtée. Jetez un coup dâÅil à âCall stackâ à droite. Il a augmenté dâun appel supplémentaire. Nous sommes à lâintérieursay()maintenant. - â âStepâ: lance la commande suivante, raccourci clavier F9.
-
Exécute la prochaine déclaration. Si nous cliquons dessus maintenant,
alertsera affiché.En cliquant dessus encore et encore, vous parcourrez toutes les instructions de script une par une.
â âStep overâ: lance la commande suivante, mais nâentre pas dans une fonction, raccourci clavier F10.
 : Similaire à la commande âStepâ précédente, mais se comporte différemment si lâinstruction suivante est un appel de fonction (pas une fonction intégrée, comme alert, mais une fonction qui nous est propre).
Si nous les comparons, la commande âStepâ entre dans un appel de fonction imbriqué et interrompt lâexécution à sa première ligne, tandis que âStep overâ exécute lâappel de fonction imbriqué de manière invisible pour nous, en sautant les fonctions internes.
Lâexécution est alors suspendue immédiatement après cette fonction.
Câest bien si nous ne sommes pas intéressés à voir ce qui se passe dans lâappel de fonction.
- â âStep intoâ, raccourci clavier F11.
-
Cela ressemble à âStepâ, mais se comporte différemment dans le cas dâappels de fonctions asynchrones. Si vous commencez seulement à apprendre le JavaScript, vous pouvez alors ignorer la différence, car nous nâavons pas encore dâappels asynchrones.
Pour le futur, il suffit de noter que la commande âStepâ ignore les actions asynchrones, telles que
setTimeout(appel de fonction planifiée), qui sâexécutent ultérieurement. Le âPas à pasâ entre dans leur code, les attend si nécessaire. Voir DevTools manual pour plus de détails. - â âStep outâ: continuer lâexécution jusquâà la fin de la fonction en cours, raccourci clavier Shift+F11.
-
Continue lâexécution et lâarrête à la toute dernière ligne de la fonction en cours. Câest pratique lorsque nous avons accidentellement entré un appel imbriqué en utilisant , mais cela ne nous intéresse pas et nous voulons continuer jusquâau bout le plus tôt possible.
- â active / désactive tous les points dâarrêt.
-
Ce bouton ne déplace pas lâexécution. Juste un ensemble de on/off pour les points dâarrêt.
- â active/désactive la pause automatique en cas dâerreur.
-
Lorsquâil est activé, si les outils de développement sont ouverts, une erreur lors de lâexécution du script le met automatiquement en pause. Ensuite, nous pouvons analyser les variables dans le débogueur pour voir ce qui nâa pas fonctionné. Donc, si notre script sâarrête avec une erreur, nous pouvons ouvrir le débogueur, activer cette option et recharger la page pour voir où il sâarrête et quel est le contexte à ce moment-là .
Un clic droit sur une ligne de code ouvre le menu contextuel avec une excellente option appelée âContinue to hereâ.
Câest pratique lorsque nous voulons faire plusieurs pas en avant, mais nous sommes trop paresseux pour définir un point dâarrêt.
Logging
Pour afficher quelque chose sur la console depuis notre code, utilisez la fonction console.log.
Par exemple, cela affiche les valeurs de 0 Ã 4 sur la console :
// ouvrir la console pour visualiser
for (let i = 0; i < 5; i++) {
console.log("value,", i);
}
Les internautes ne voient pas cette sortie, elle se trouve dans la console. Pour la voir, ouvrez lâonglet Console des outils de développement ou appuyez sur Esc lorsque vous vous trouvez dans un autre onglet : la console en bas sâouvre.
Si nous avons assez de logging dans notre code, nous pouvons voir ce qui se passe dans les enregistrements, sans le débogueur.
Résumé
Comme nous pouvons le constater, il existe trois méthodes principales pour suspendre un script :
- Les points dâarrêt (breakpoint).
- Les instructions du
debugger. - Une erreur (si les outils de développement sont ouverts et le bouton est activé)
En pause, nous pouvons déboguer â examiner les variables et suivre le code pour voir où lâexécution sâest mal passée.
Il y a beaucoup plus dâoptions dans les outils de développement que celles couvertes ici. Le manuel complet est ici https://developers.google.com/web/tools/chrome-devtools.
Les informations de ce chapitre sont suffisantes pour commencer le débogage, mais plus tard, en particulier si vous utilisez beaucoup de fonctions de navigateur, allez-y et examinez les fonctionnalités plus avancées des outils de développement.
Oh, et vous pouvez aussi cliquer sur différents endroits des outils de développement et voir ce qui sâaffiche. Câest probablement la voie la plus rapide pour apprendre les outils de développement. Nâoubliez pas le clic droit et les menus contextuels !
Commentaires
<code>, pour plusieurs lignes â enveloppez-les avec la balise<pre>, pour plus de 10 lignes - utilisez une sandbox (plnkr, jsbin, codepenâ¦)