Documentation de référence sur le débogage JavaScript

Sofia Emelianova
Sofia Emelianova

Découvrez de nouveaux workflows de débogage grâce à cette référence complète des fonctionnalités de débogage des outils pour les développeurs Chrome.

Consultez Premiers pas avec le débogage JavaScript dans les outils pour les développeurs Chrome pour découvrir les principes de base du débogage.

Mettre en pause le code avec des points d'arrêt

Définissez un point d'arrêt afin de pouvoir suspendre votre code pendant son exécution. Pour savoir comment définir des points d'arrêt, consultez Pause Your Code With Breakpoints (Suspendre votre code avec des points d'arrêt).

Vérifier les valeurs lors de la mise en veille

Lorsque l'exécution est suspendue, le débogueur évalue toutes les variables, constantes et objets de la fonction en cours jusqu'à un point d'arrêt. Le débogueur affiche les valeurs actuelles intégrées à côté des déclarations correspondantes.

Évaluations intégrées affichées à côté des déclarations.

Vous pouvez utiliser la console pour interroger les variables, constantes et objets évalués.

Utiliser la console pour interroger les variables, les constantes et les objets évalués

Aperçu des propriétés de classe/fonction en pointant dessus

Lorsque l'exécution est suspendue, pointez sur le nom d'une classe ou d'une fonction pour prévisualiser ses propriétés.

Prévisualiser les propriétés de classe/fonction par survol de la souris

Examiner le code

Une fois votre code mis en veille, parcourez-le, une expression à la fois, et examinez le flux de contrôle et les valeurs des propriétés.

Passer la ligne de code

Lorsqu'elle est mise en veille sur une ligne de code contenant une fonction sans rapport avec le problème que vous rencontrez cliquez sur Step over (Passer) Pas à pas principal pour exécuter la fonction sans y entrer.

Sélectionnez "Passer".

Par exemple, supposons que vous déboguez le code suivant:

function updateHeader() {
  var day = new Date().getDay();
  var name = getName(); // A
  updateName(name); // D
}
function getName() {
  var name = app.first + ' ' + app.last; // B
  return name; // C
}

Votre compte est suspendu depuis le A. Lorsque vous appuyez sur Passer, DevTools exécute tout le code de la fonction que vous ignorez, à savoir B et C. Les outils de développement s'interrompent ensuite sur D.

Entrer dans la ligne de code

Lorsque vous êtes arrêté sur une ligne de code contenant un appel de fonction lié au problème que vous déboguez, cliquez sur Entrer dans Entrer pour examiner cette fonction plus en détail.

Sélectionnez "Entrer".

Par exemple, supposons que vous déboguez le code suivant:

function updateHeader() {
  var day = new Date().getDay();
  var name = getName(); // A
  updateName(name);
}
function getName() {
  var name = app.first + ' ' + app.last; // B
  return name;
}

Votre compte est suspendu depuis le A. Si vous appuyez sur Entrer, les outils de développement exécutent cette ligne de code, puis B

Sortir de la ligne de code

Lorsque vous êtes en pause dans une fonction qui n'est pas liée au problème que vous déboguez, cliquez sur Step out (Sortir) Pas à pas sortant pour exécuter le reste du code de la fonction.

Sélectionnez "Se déconnecter".

Par exemple, supposons que vous déboguez le code suivant:

function updateHeader() {
  var day = new Date().getDay();
  var name = getName();
  updateName(name); // C
}
function getName() {
  var name = app.first + ' ' + app.last; // A
  return name; // B
}

Votre compte est suspendu depuis le A. En appuyant sur Sortir, DevTools exécute le reste du code dans getName(), qui n'est que B dans cet exemple, puis s'arrête sur C.

Exécuter tout le code jusqu'à une certaine ligne

Lors du débogage d'une fonction longue, il peut y avoir beaucoup de code qui n'est pas lié au problème que vous rencontrez le débogage.

Vous pourriez parcourir toutes les lignes, mais cela peut être fastidieux. Vous pouvez définir un point d'arrêt sur la ligne de code qui vous intéresse, puis appuyer sur Resume Script Execution (Reprendre l'exécution du script) Reprendre l'exécution du script, mais il existe une méthode plus rapide.

Effectuez un clic droit sur la ligne de code qui vous intéresse, puis sélectionnez Continue to here (Continuer). DevTools exécute tout le code jusqu'à ce point, puis s'arrête sur cette ligne.

Sélectionnez "Continuer vers ici".

Reprendre l'exécution du script

Pour poursuivre l'exécution de votre script après une pause, cliquez sur Reprendre l'exécution du script. Reprendre l'exécution du script DevTools exécute le script jusqu'au point d'arrêt suivant, le cas échéant.

Sélectionnez "Reprendre l'exécution du script".

Forcer l'exécution du script

Pour ignorer tous les points d'arrêt et forcer votre script à reprendre l'exécution, cliquez de manière prolongée sur Reprendre le script Exécution Reprendre l'exécution du script puis sélectionnez Forcer l'exécution du script. Forcer l'exécution du script

Sélectionnez "Forcer l'exécution du script".

Modifier le contexte du fil de discussion

Lorsque vous travaillez avec des web workers ou des service workers, cliquez sur un contexte listé dans le volet Threads (Fils) pour passer à ce contexte. L'icône en forme de flèche bleue représente le contexte actuellement sélectionné.

Le volet "Threads".

Sur la capture d'écran ci-dessus, le volet Threads (Fils de discussion) est encadré en bleu.

Par exemple, supposons que vous soyez mis en pause sur un point d'arrêt dans votre script principal et dans votre script de worker de service. Vous souhaitez afficher les propriétés locales et globales du contexte du service worker, mais le panneau Sources affiche le contexte du script principal. En cliquant sur l'entrée du service worker dans vous pouvez basculer vers ce contexte.

Parcourir des expressions séparées par une virgule

L'exécution d'expressions séparées par une virgule vous permet de déboguer du code réduit. Prenons l'exemple de code suivant :

function foo() {}

function bar() {
  foo();
  foo();
  return 42;
}

bar();

Lorsqu'il est minifié, il contient une expression foo(),foo(),42 séparée par des virgules :

function foo(){}function bar(){return foo(),foo(),42}bar();

Le débogueur examine ces expressions de la même manière.

Parcourir une expression d'éléments séparés par une virgule.

Par conséquent, le comportement de la progression est identique :

  • Entre le code réduit et le code créé.
  • Lorsque vous utilisez des mappages source pour déboguer le code minimisé en fonction du code d'origine. En d'autres termes, lorsque vous voyez des points-virgules, vous pouvez toujours vous attendre à les parcourir, même si la source réelle que vous déboguez est minifiée.

Afficher et modifier les propriétés locales, locales et internationales

Lorsque vous êtes en veille sur une ligne de code, utilisez le volet Portée pour afficher et modifier les valeurs des propriétés et dans les champs d'application local, de route fermée et global.

  • Double-cliquez sur la valeur d'une propriété pour la modifier.
  • Les propriétés non énumérables sont grisées.

Volet "Champ d'application".

Sur la capture d'écran ci-dessus, le volet Scope (Champ d'application) est encadré en bleu.

Afficher la pile d'appel actuelle

Lorsque vous êtes en pause sur une ligne de code, utilisez le volet Pile d'appel pour afficher la pile d'appel qui vous a redirigé point d'accès.

Cliquez sur une entrée pour accéder à la ligne de code où cette fonction a été appelée. Icône en forme de flèche bleue représente la fonction actuellement mise en avant par les outils de développement.

Volet "Pile d'appel".

Le volet Call Stack (Pile d'appels) de la capture d'écran ci-dessus est encadré en bleu.

Redémarrer une fonction (frame) dans une pile d'appels

Pour observer le comportement d'une fonction et l'exécuter à nouveau sans avoir à redémarrer l'ensemble du flux de débogage, vous pouvez relancer l'exécution d'une seule fonction lorsque celle-ci est suspendue. En d'autres termes, vous pouvez redémarrer le cadre de la fonction dans la pile d'appel.

Pour redémarrer un frame:

  1. Suspendre l'exécution de la fonction à un point d'arrêt Le volet Call Stack (Pile des appels) enregistre l'ordre des appels de fonction.
  2. Dans le volet Call Stack (Pile d'appels), effectuez un clic droit sur une fonction, puis sélectionnez Restart frame (Redémarrer le frame) dans le menu déroulant.

    Sélectionnez Redémarrer le frame dans le menu déroulant.

Pour comprendre le fonctionnement de Restart frame, prenons l'exemple de code suivant :

function foo(value) {
    console.log(value);
    bar(value);
}

function bar(value) {
    value++;
    console.log(value);
    debugger;
}

foo(0);

La fonction foo() utilise 0 comme argument, l'enregistre et appelle la fonction bar(). La fonction bar(), à son tour, incrémente l'argument.

Essayez de redémarrer les frames des deux fonctions comme suit :

  1. Copiez le code ci-dessus dans un nouvel extrait, puis exécutez-le. L'exécution s'arrête au point d'arrêt de ligne de code debugger.
  2. Notez que le débogueur affiche la valeur actuelle à côté de la déclaration de fonction: value = 1. Valeur actuelle à côté de la déclaration de fonction.
  3. Redémarrez le frame bar(). Redémarrage du frame bar().
  4. Exécutez l'instruction d'incrémentation de la valeur en appuyant sur F9. Incrémenter la valeur actuelle. Notez que la valeur actuelle augmente: value = 2.
  5. Si vous le souhaitez, dans le volet Portée, double-cliquez sur la valeur pour la modifier et définissez la valeur souhaitée. Modifier la valeur dans le volet "Champs d'application".
  6. Essayez de redémarrer le frame bar() et d'exécuter l'instruction d'incrémentation plusieurs fois. La valeur continue d'augmenter. Redémarrer à nouveau le frame bar().

Le redémarrage du frame ne réinitialise pas les arguments. En d'autres termes, le redémarrage ne restaure pas l'état initial lors de l'appel de la fonction. Au lieu de cela, il déplace simplement le pointeur d'exécution au début de la fonction.

Par conséquent, la valeur de l'argument actuel est conservée en mémoire lors des redémarrages de la même fonction.

  1. À présent, redémarrez le cadre foo() dans la pile d'appel. Redémarrage de la trame foo(). Notez que la valeur est à nouveau 0. ALT_TEXT_HERE

En JavaScript, les modifications apportées aux arguments ne sont pas visibles (reflétées) en dehors de la fonction. Les fonctions imbriquées reçoivent des valeurs, et non leur emplacement en mémoire. 1. Relancez l'exécution du script (F8) pour terminer ce tutoriel.

Afficher les frames de la liste des éléments à ignorer

Par défaut, le volet Call Stack (Pile d'appel) n'affiche que les cadres pertinents pour votre code et omet les scripts ajoutés à Paramètres. Settings > Liste d'éléments à ignorer.

Pile d'appel.

Pour afficher la pile d'appels complète, y compris les cadres tiers, activez l'option Afficher les cadres de la liste d'ignorer dans la section Pile d'appels.

Afficher les frames de la liste des éléments à ignorer.

Essayez-la sur cette page de démonstration:

  1. Dans le panneau Sources, ouvrez le fichier src > app > app.component.ts.
  2. Définissez un point d'arrêt à la fonction increment().
  3. Dans la section Pile d'appel, cochez ou décochez la case Afficher les frames de la liste d'ignorer et observez la liste pertinente ou complète des frames dans la pile d'appel.

Afficher les frames asynchrones

S'ils sont compatibles avec le framework que vous utilisez, les outils de développement peuvent suivre les opérations asynchrones en associant les deux parties du code asynchrone.

Dans ce cas, la pile d'appels affiche l'intégralité de l'historique des appels, y compris les cadres d'appel asynchrones.

Frames d'appel asynchrone.

Copier la trace de la pile

Effectuez un clic droit n'importe où dans le volet Pile d'appel et sélectionnez Copier la trace de la pile pour copier l'appel en cours la pile dans le presse-papiers.

Sélectionnez "Copier la trace de la pile".

Voici un exemple de résultat:

getNumber1 (get-started.js:35)
inputsAreEmpty (get-started.js:22)
onClick (get-started.js:15)

Parcourir l'arborescence de fichiers

Utilisez le volet Page pour parcourir l'arborescence des fichiers.

Regrouper les fichiers créés et déployés dans l'arborescence de fichiers

Lorsque vous développez des applications Web à l'aide de frameworks (par exemple, React ou Angular), il peut être difficile de naviguer dans les sources en raison des fichiers réduits générés par les outils de compilation (webpack ou Vite, par exemple).

Pour vous aider à parcourir les sources, la page Sources > Le volet Page peut regrouper les fichiers en deux catégories:

  • Icône Code. Auteur Semblable aux fichiers sources que vous affichez dans votre IDE. Les outils de développement génèrent ces fichiers en fonction des cartes sources fournies par vos outils de compilation.
  • Icône "Déployé". Déployé. Fichiers réellement lus par le navigateur. En général, ces fichiers sont minifiés.

Pour activer le regroupement, activez Menu à trois points. > Option Grouper les fichiers par créés/déployés Expérimental. dans le menu à trois points en haut de l'arborescence de fichiers.

Regrouper les fichiers par création / déployée.

Masquer les sources de la liste des éléments à ignorer dans l'arborescence de fichiers

Pour vous aider à vous concentrer uniquement sur le code que vous créez, le volet Sources > Page affiche en gris tous les scripts ou répertoires ajoutés à Paramètres. Paramètres > Liste d'ignorer par défaut.

Pour masquer complètement ces scripts, sélectionnez Sources > Page > Menu à trois points. > Masquer les sources de la liste d'ignorer Expérimental..

Avant et après le masquage des sources de la liste des éléments à ignorer.

Ignorer un script ou un modèle de scripts

Vous pouvez ignorer un script lors du débogage. Lorsqu'il est ignoré, un script est sont masquées dans le volet Call Stack (Pile d'appel), et vous n'entrez jamais dans les fonctions du script lorsque vous exécutez dans votre code.

Par exemple, supposons que vous parcourez ce code:

function animate() {
  prepare();
  lib.doFancyStuff(); // A
  render();
}

A est une bibliothèque tierce de confiance. Si vous êtes certain que le problème que vous déboguez n'est pas lié à la bibliothèque tierce, il est logique d'ignorer le script.

Ignorer un script ou un répertoire de l'arborescence de fichiers

Pour ignorer un script individuel ou un répertoire entier :

  1. Dans Sources > Page, effectuez un clic droit sur un répertoire ou un fichier de script.
  2. Sélectionnez Ajouter un répertoire/un script à la liste des éléments à ignorer.

Ignore les options d'un répertoire ou d'un fichier de script.

Si vous n'avez pas masqué les sources de la liste d'ignorer, vous pouvez sélectionner une telle source dans l'arborescence des fichiers, puis cliquer sur Supprimer de la liste d'ignorer ou Configurer dans la bannière d'avertissement Avertissement..

Un fichier ignoré sélectionné comporte des boutons "Supprimer" et "Configurer".

Sinon, vous pouvez supprimer les répertoires et les scripts masqués et ignorés de la liste dans Paramètres. Settings > Ignore List (Paramètres > Liste d'ignorer).

Ignorer un script dans le volet de l'éditeur

Pour ignorer un script à partir du volet Éditeur:

  1. Ouvrez le fichier.
  2. Effectuez un clic droit n'importe où.
  3. Sélectionnez Ajouter un script à la liste des éléments à ignorer.

Ignorer un script depuis le volet "Éditeur"

Vous pouvez supprimer un script de la liste des scripts ignorés dans Paramètres. Paramètres > Liste des éléments à ignorer.

Ignorer un script depuis le volet "Call Stack" (Pile d'appels)

Pour ignorer un script du volet Call Stack (Pile d'appel), procédez comme suit:

  1. Effectuez un clic droit sur une fonction du script.
  2. Sélectionnez Ajouter un script à la liste des éléments à ignorer.

Ignorer un script depuis le volet "Call Stack" (Pile d'appels)

Vous pouvez supprimer un script de la liste des scripts ignorés dans Paramètres. Paramètres > Liste des éléments à ignorer.

Ignorer un script dans les paramètres

Voir Paramètres. Paramètres > Liste des éléments à ignorer.

Exécutez des extraits de code de débogage à partir de n'importe quelle page

Si vous exécutez plusieurs fois le même code de débogage dans la console, envisagez d'utiliser des extraits de code. Les extraits sont des scripts exécutables que vous créez, stockez et exécutez dans les outils de développement.

Pour en savoir plus, consultez Exécuter des extraits de code à partir de n'importe quelle page.

Surveiller les valeurs des expressions JavaScript personnalisées

Utilisez le volet "Surveiller" pour surveiller les valeurs des expressions personnalisées. Vous pouvez regarder n'importe quel code JavaScript valide .

Le volet de surveillance.

  • Cliquez sur Ajouter une expression. Ajouter une expression pour créer une expression "watch".
  • Cliquez sur Actualiser Actualiser pour actualiser les valeurs de toutes les expressions existantes. Les valeurs sont actualisées automatiquement lors de l'exécution du code.
  • Pointez sur une expression, puis cliquez sur Supprimer l'expression. Supprimer l'expression pour la supprimer.

Inspecter et modifier les scripts

Lorsque vous ouvrez un script dans le volet Page, les outils de développement affichent son contenu dans le volet Éditeur. Dans le volet Éditeur, vous pouvez parcourir et modifier votre code.

Vous pouvez également remplacer le contenu localement ou créer un espace de travail et enregistrer les modifications apportées dans les outils de développement directement dans vos sources locales.

Rendre lisible un fichier réduit

Par défaut, le panneau Sources affiche les fichiers minimisés de manière élégante. Lors de l'affichage mis en forme, l'Éditeur peut afficher une seule ligne de code longue sur plusieurs lignes, avec - pour indiquer qu'il s'agit de la continuation de la ligne.

Une longue ligne de code bien cadrée et affichée sur plusieurs lignes, avec les traits d'union "-" pour indiquer la continuation de ligne.

Pour afficher la taille réduite du fichier au fur et à mesure de son chargement, cliquez sur { } en bas à gauche de l'Éditeur.

Plier des blocs de code

Pour plier un bloc de code, pointez sur le numéro de ligne dans la colonne de gauche, puis cliquez sur Réduire. Réduire.

Pour développer le bloc de code, cliquez sur {...} à côté de celui-ci.

Pour configurer ce comportement, consultez Paramètres. Settings > Preferences > Sources (Paramètres > Préférences > Sources).

Modifier un script

Lorsque vous corrigez un bug, vous souhaitez souvent tester certaines modifications apportées à votre code JavaScript. Vous n'avez pas besoin d'apporter les modifications dans un navigateur externe, puis d'actualiser la page. Vous pouvez modifier votre script dans DevTools.

Pour modifier un script:

  1. Ouvrez le fichier dans le volet Éditeur du panneau Sources.
  2. Apportez vos modifications dans le volet Éditeur.
  3. Appuyez sur Commande+S (Mac) ou Ctrl+S (Windows, Linux) pour enregistrer. Les outils de développement corrigent l'intégralité du fichier JS dans le moteur JavaScript de Chrome.

    Volet "Éditeur".

    Sur la capture d'écran ci-dessus, le volet Editor (Éditeur) est encadré en bleu.

Modifier une fonction suspendue en direct

Lorsque l'exécution est mise en pause, vous pouvez modifier la fonction en cours et appliquer les modifications en direct, avec les limites suivantes :

  • Vous ne pouvez modifier que la fonction la plus élevée dans la pile d'appel.
  • Il ne doit pas y avoir d'appels récursifs à la même fonction plus bas dans la pile.

Pour modifier une fonction en direct :

  1. Mettez l'exécution en pause à l'aide d'un point d'arrêt.
  2. Modifiez la fonction mise en veille.
  3. Appuyez sur Commande / Ctrl+S pour appliquer les modifications. Le débogueur redémarre automatiquement la fonction.
  4. Poursuivez l'exécution.

Regardez la vidéo ci-dessous pour découvrir ce workflow.

Dans cet exemple, le type string des variables addend1 et addend2 est initialement incorrect. Ainsi, au lieu d'ajouter des nombres, les chaînes sont concatenatées. Pour résoudre ce problème, les fonctions parseInt() sont ajoutées lors de la modification en temps réel.

Pour rechercher du texte dans un script :

  1. Ouvrez le fichier dans le volet Éditeur du panneau Sources.
  2. Pour ouvrir une barre de recherche intégrée, appuyez sur Cmd+F (Mac) ou Ctrl+F (Windows, Linux).
  3. Saisissez votre requête dans la barre. Rechercher. Vous pouvez également:
    • Cliquez sur Respectez la casse. Respecter la casse pour rendre votre requête sensible à la casse.
    • Cliquez sur Bouton "Expression régulière". Utiliser une expression régulière pour effectuer une recherche à l'aide d'une expression régulière.
  4. Appuyez sur Entrée. Pour passer au résultat de recherche précédent ou suivant, appuyez sur le bouton vers le haut ou vers le bas.

Pour remplacer le texte que vous avez trouvé :

  1. Dans la barre de recherche, cliquez sur le bouton Remplacer. Remplacer. Remplacer.
  2. Saisissez le texte à remplacer, puis cliquez sur Remplacer ou Tout remplacer.

Désactiver JavaScript

Consultez Désactiver JavaScript avec les outils pour les développeurs Chrome.