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

Sofia Emelianova
Sofia Emelianova

Utilisez des points d'arrêt pour mettre en pause votre code JavaScript. Ce guide explique chaque type de point d'arrêt disponible dans DevTools, ainsi que les cas d'utilisation et la configuration de chaque type. Pour un tutoriel interactif sur le processus de débogage, consultez Premiers pas avec le débogage JavaScript dans les outils pour les développeurs Chrome.

Présentation des cas d'utilisation de chaque type de point d'arrêt

Le type de point d'arrêt le plus connu est le point d'arrêt par ligne de code. Cependant, la configuration de points d'arrêt par ligne de code peut être inefficace, en particulier si vous ne savez pas exactement où chercher ou si vous travaillez avec un grand codebase. Vous pouvez gagner du temps lors du débogage en sachant comment et quand utiliser les autres types de points d'arrêt.

Type de point d'arrêtUtilisez-le lorsque vous souhaitez :
Ligne de codeEffectuer une pause sur une région de code exacte
Ligne de code conditionnelleMettez en pause une région de code exacte, mais uniquement lorsque l'une des autres conditions est vraie.
LogpointConsignez un message dans la console sans suspendre l'exécution.
DOMMettez en pause le code qui modifie ou supprime un nœud DOM spécifique ou ses enfants.
XHRMettre en veille lorsqu'une URL XHR contient un format de chaîne
Écouteur d'événementsMettez en pause le code qui s'exécute après le déclenchement d'un événement, tel que click.
ExceptionMettez en pause la ligne de code qui génère une exception interceptée ou non.
FonctionMettez en pause chaque fois qu'une fonction spécifique est appelée.
Trusted Type (Type approuvé)Suspendre en cas de non-respect du Trusted Type.

Points d'arrêt de ligne de code

Utilisez un point d'arrêt par ligne de code lorsque vous connaissez la région de code exacte que vous devez examiner. DevTools s'arrête systématiquement avant l'exécution de cette ligne de code.

Pour définir un point d'arrêt sur une ligne de code dans DevTools:

  1. Cliquez sur le panneau Sources.
  2. Ouvrez le fichier contenant la ligne de code à laquelle vous souhaitez arrêter l'exécution.
  3. Accédez à la ligne de code.
  4. À gauche de la ligne de code se trouve la colonne de numéro de ligne. Cliquez dessus. Une icône bleue s'affiche au-dessus de la colonne des numéros de ligne.

Point d'arrêt de ligne de code

Cet exemple montre un point d'arrêt de ligne de code défini sur la ligne 29.

Points d'arrêt par ligne de code dans votre code

Appelez debugger à partir de votre code pour mettre en pause cette ligne. Cela équivaut à un point d'arrêt de ligne de code, sauf que le point d'arrêt est défini dans votre code, et non dans l'interface utilisateur de DevTools.

console.log('a');
console.log('b');
debugger;
console.log('c');

Points d'arrêt conditionnels par ligne de code

Utilisez un point d'arrêt de ligne de code conditionnel lorsque vous souhaitez arrêter l'exécution, mais uniquement lorsque certaines conditions sont remplies.

Ces points d'arrêt sont utiles lorsque vous souhaitez ignorer les coupures qui ne sont pas pertinentes pour votre cas, en particulier dans une boucle.

Pour définir un point d'arrêt conditionnel sur une ligne de code:

  1. Ouvrez le panneau Sources.
  2. Ouvrez le fichier contenant la ligne de code à laquelle vous souhaitez arrêter l'exécution.
  3. Accédez à la ligne de code.
  4. À gauche de la ligne de code se trouve la colonne de numéro de ligne. Effectuez un clic droit dessus.
  5. Sélectionnez Ajouter un point d'arrêt conditionnel. Une boîte de dialogue s'affiche sous la ligne de code.
  6. Saisissez votre condition dans la boîte de dialogue.
  7. Appuyez sur Entrée pour activer le point d'arrêt. Une icône orange avec un point d'interrogation s'affiche en haut de la colonne des numéros de ligne.

Point d'arrêt conditionnel sur une ligne de code.

Cet exemple montre un point d'arrêt de ligne de code conditionnel qui ne s'est déclenché que lorsque x a dépassé 10 dans une boucle lors de l'itération i=6.

Enregistrer les points d'arrêt de ligne de code

Utilisez des points d'arrêt de journalisation (logpoints) de ligne de code pour consigner des messages dans la console sans suspendre l'exécution et sans encombrer votre code d'appels console.log().

Pour définir un point de journalisation:

  1. Ouvrez le panneau Sources.
  2. Ouvrez le fichier contenant la ligne de code à laquelle vous souhaitez arrêter l'exécution.
  3. Accédez à la ligne de code.
  4. À gauche de la ligne de code se trouve la colonne de numéro de ligne. Effectuez un clic droit dessus.
  5. Sélectionnez Ajouter un point de journalisation. Une boîte de dialogue s'affiche sous la ligne de code.
  6. Saisissez votre message de journal dans la boîte de dialogue. Vous pouvez utiliser la même syntaxe que pour un appel console.log(message).

    Par exemple, vous pouvez consigner:

    "A string " + num, str.length > 1, str.toUpperCase(), obj
    

    Dans ce cas, le message enregistré est le suivant:

    // str = "test"
    // num = 42
    // obj = {attr: "x"}
    A string 42 true TEST {attr: 'x'}
    
  7. Appuyez sur Entrée pour activer le point d'arrêt. Une icône rose avec deux points s'affiche au-dessus de la colonne des numéros de ligne.

Point de journalisation qui consigne une chaîne et une valeur de variable dans la console.

Cet exemple montre un point de journalisation à la ligne 30 qui consigne une chaîne et une valeur de variable dans la console.

Modifier les points d'arrêt par ligne de code

Utilisez la section Points d'arrêt pour désactiver, modifier ou supprimer des points d'arrêt de ligne de code.

Modifier des groupes de points d'arrêt

La section Points d'arrêt regroupe les points d'arrêt par fichier et les classe par numéro de ligne et de colonne. Vous pouvez effectuer les opérations suivantes avec les groupes:

  • Pour réduire ou développer un groupe, cliquez sur son nom.
  • Pour activer ou désactiver un groupe ou un point d'arrêt individuellement, cliquez sur Case à cocher. à côté du groupe ou du point d'arrêt.
  • Pour supprimer un groupe, pointez dessus, puis cliquez sur J'étais pas loin..

Cette vidéo montre comment réduire des groupes, et désactiver ou activer des points d'arrêt un par un ou par groupes. Lorsque vous désactivez un point d'arrêt, le panneau Sources rend son repère à côté du numéro de ligne transparent.

Les groupes disposent de menus contextuels. Dans la section Points d'arrêt, effectuez un clic droit sur un groupe, puis sélectionnez:

Menu contextuel d'un groupe.

  • Supprimez tous les points d'arrêt du fichier (groupe).
  • Désactivez tous les points d'arrêt dans le fichier.
  • Activez tous les points d'arrêt dans le fichier.
  • Supprimez tous les points d'arrêt (dans tous les fichiers).
  • Supprimez les autres points d'arrêt (dans d'autres groupes).

Modifier les points d'arrêt

Pour modifier un point d'arrêt:

  • Cliquez sur Case à cocher. à côté d'un point d'arrêt pour l'activer ou le désactiver. Lorsque vous désactivez un point d'arrêt, le panneau Sources rend son repère à côté du numéro de ligne transparent.
  • Pointez sur un point d'arrêt, puis cliquez sur Modifier. pour le modifier et sur J'étais pas loin. pour le supprimer.
  • Lorsque vous modifiez un point d'arrêt, modifiez son type dans la liste déroulante de l'éditeur intégré.

    Modifier le type d'un point d'arrêt

  • Effectuez un clic droit sur un point d'arrêt pour afficher son menu contextuel, puis sélectionnez l'une des options suivantes:

    Menu contextuel d'un point d'arrêt.

    • Afficher l'emplacement
    • Modifiez la condition ou le point de journalisation.
    • Activez tous les points d'arrêt.
    • Désactivez tous les points d'arrêt.
    • Supprimez le point d'arrêt.
    • Supprimez les autres points d'arrêt (dans tous les fichiers).
    • Supprimez tous les points d'arrêt (dans tous les fichiers).

Regardez la vidéo pour voir comment modifier différents points d'arrêt: les désactiver, les supprimer, modifier la condition, afficher l'emplacement dans le menu et modifier le type.

Ignorer les points d'arrêt avec "Ne jamais suspendre ici"

Utilisez un point d'arrêt de ligne de code Ne jamais mettre en veille ici pour ignorer les pauses qui se produiraient pour d'autres raisons. Cela peut être utile lorsque vous avez activé les points d'arrêt d'exception, mais que le débogueur continue de s'arrêter sur une exception particulièrement bruyante que vous ne souhaitez pas déboguer.

Pour désactiver un emplacement de pause:

  1. Dans le panneau Sources, ouvrez le fichier source et recherchez la ligne sur laquelle vous ne souhaitez pas effectuer de pause.
  2. Cliquez avec le bouton droit de la souris sur le numéro de ligne dans la colonne des numéros de ligne à gauche, à côté de l'instruction à l'origine de l'interruption.
  3. Dans le menu déroulant, sélectionnez Ne jamais mettre en pause ici. Un point d'arrêt orange (conditionnel) apparaît à côté de la ligne.

Vous pouvez également couper le son du point d'arrêt lorsque l'exécution est suspendue. Regardez la vidéo suivante pour découvrir le workflow.

Avec Ne jamais suspendre ici, vous pouvez couper le son des instructions du débogueur et de tous les autres types de points d'arrêt, à l'exception des points d'arrêt de ligne de code et des points d'arrêt d'écouteur d'événement.

Ne jamais mettre en pause ici peut échouer sur une ligne contenant plusieurs instructions si l'instruction qui ne doit pas être mise en pause est différente de celle qui provoque la mise en pause. Dans le code mappé source, tous les emplacements de points d'arrêt ne correspondent pas à l'instruction d'origine qui provoque l'arrêt.

Points d'arrêt de modification du DOM

Utilisez un point d'arrêt de modification du DOM lorsque vous souhaitez suspendre le code qui modifie un nœud DOM ou ses enfants.

Pour définir un point d'arrêt de modification du DOM:

  1. Cliquez sur l'onglet Éléments.
  2. Accédez à l'élément sur lequel vous souhaitez définir le point d'arrêt.
  3. Effectuez un clic droit sur l'élément.
  4. Pointez sur Break on (Arrêter sur), puis sélectionnez Subtree modifications (Modifications du sous-arbre), Attribute modifications (Modifications des attributs) ou Node removal (Suppression de nœud).

Menu contextuel permettant de créer un point d'arrêt de modification du DOM.

Cet exemple montre le menu contextuel permettant de créer un point d'arrêt de modification du DOM.

Vous trouverez une liste des points d'arrêt de modification du DOM dans:

  • Volet Éléments > Points d'arrêt DOM
  • Sources > Volet Points d'arrêt DOM

Listes des points d'arrêt DOM dans les panneaux "Éléments" et "Sources".

Vous pouvez y effectuer les actions suivantes:

  • Activez ou désactivez-les avec Case à cocher..
  • Effectuez un clic droit > Supprimez ou Affichez les éléments dans le DOM.

Types de points d'arrêt de modification du DOM

  • Modifications de la sous-arborescence. Déclenché lorsqu'un enfant du nœud actuellement sélectionné est supprimé ou ajouté, ou lorsque le contenu d'un enfant est modifié. Ne se déclenche pas en cas de modification des attributs des nœuds enfants ni de modification du nœud actuellement sélectionné.
  • Modifications des attributs: se déclenche lorsqu'un attribut est ajouté ou supprimé sur le nœud actuellement sélectionné, ou lorsqu'une valeur d'attribut change.
  • Suppression de nœud: se déclenche lorsque le nœud actuellement sélectionné est supprimé.

Points d'arrêt XHR/Fetch

Utilisez un point d'arrêt XHR/Fetch lorsque vous souhaitez interrompre la procédure lorsque l'URL de requête d'un XHR contient une chaîne spécifiée. Les outils de développement se suspendent à la ligne de code où l'appel XHR appelle send().

Par exemple, si vous constatez que votre page demande une URL incorrecte et que vous souhaitez trouver rapidement le code source AJAX ou Fetch à l'origine de la requête incorrecte, cette fonctionnalité peut vous être utile.

Pour définir un point d'arrêt XHR/Fetch:

  1. Cliquez sur le panneau Sources.
  2. Développez le volet Points d'arrêt XHR.
  3. Cliquez sur Ajouter Ajouter un point d'arrêt.
  4. Saisissez la chaîne à utiliser comme séparateur. Les outils de développement s'arrêtent lorsque cette chaîne est présente n'importe où dans l'URL de requête d'un XHR.
  5. Appuyez sur Entrée pour confirmer.

Création d'un point d'arrêt XHR/Fetch.

Cet exemple montre comment créer un point d'arrêt XHR/fetch dans les points d'arrêt XHR/fetch pour toute requête contenant org dans l'URL.

Points d'arrêt de l'écouteur d'événements

Utilisez des points d'arrêt d'écouteur d'événements lorsque vous souhaitez suspendre le code de l'écouteur d'événements qui s'exécute après le déclenchement d'un événement. Vous pouvez sélectionner des événements spécifiques, tels que click, ou des catégories d'événements, comme tous les événements de la souris.

  1. Cliquez sur le panneau Sources.
  2. Développez le volet Points d'arrêt de l'écouteur d'événements. DevTools affiche une liste de catégories d'événements, telles que Animation.
  3. Cochez l'une de ces catégories pour suspendre la diffusion chaque fois qu'un événement de cette catégorie est déclenché, ou développez la catégorie et cochez un événement spécifique.

Création d'un point d'arrêt de l'écouteur d'événements.

Cet exemple montre comment créer un point d'arrêt d'écouteur d'événements pour deviceorientation.

De plus, le débogueur met en pause les événements qui se produisent dans les nœuds de calcul Web ou les worklets de n'importe quel type, y compris les worklets de stockage partagé.

Le débogueur a été suspendu sur l'événement d'un service worker.

Cet exemple montre le débogueur mis en pause sur un événement setTimer qui s'est produit dans un service worker.

Vous trouverez également une liste des écouteurs d'événements dans le volet Éléments > Écouteurs d'événements.

Points d'arrêt d'exception

Utilisez des points d'arrêt d'exception lorsque vous souhaitez mettre en pause la ligne de code qui génère une exception détectée ou non détectée. Vous pouvez mettre en pause ces deux exceptions indépendamment dans n'importe quelle session de débogage autre que Node.js.

Dans la section Points d'arrêt du panneau Sources, activez l'une des options suivantes ou les deux, puis exécutez le code:

  • Cochez Case à cocher. Suspendre sur les exceptions non détectées.

    Mise en pause en cas d'exception non détectée lorsque la case à cocher correspondante est activée.

    Dans cet exemple, l'exécution est mise en pause en raison d'une exception non détectée.

  • Cochez Case à cocher. Suspendre sur les exceptions interceptées.

    Mise en pause en cas d'exception interceptée lorsque la case à cocher correspondante est activée.

    Dans cet exemple, l'exécution est mise en pause en cas d'exception détectée.

Exceptions dans les appels asynchrones

Si l'une ou les deux cases à cocher "Interceptées" et "Non interceptées" sont activées, le débogueur tente de suspendre les exceptions correspondantes dans les appels synchrones et asynchrones. Dans le cas asynchrone, le débogueur recherche des gestionnaires de refus dans les promesses pour déterminer quand s'arrêter.

Exceptions détectées et code ignoré

Lorsque la liste d'ignorement est activée, le débogueur s'arrête sur les exceptions détectées dans des blocs de pile non ignorés ou qui passent par un tel bloc dans la pile d'appel.

L'exemple suivant montre le débogueur mis en pause sur une exception détectée générée par l'library.js ignorée qui passe par l'mycode.js non ignorée.

Mise en pause sur une exception détectée qui passe par un frame non ignoré dans la pile d'appels.

Pour en savoir plus sur le comportement du débogueur dans les cas limites, testez une collection de scénarios sur cette page de démonstration.

Points d'arrêt de fonction

Appelez debug(functionName), où functionName est la fonction que vous souhaitez déboguer, lorsque vous souhaitez suspendre chaque fois qu'une fonction spécifique est appelée. Vous pouvez insérer debug() dans votre code (comme une instruction console.log()) ou l'appeler à partir de la console DevTools. debug() équivaut à définir un point d'arrêt par ligne de code sur la première ligne de la fonction.

function sum(a, b) {
  let result = a + b; // DevTools pauses on this line.
  return result;
}
debug(sum); // Pass the function object, not a string.
sum();

Assurez-vous que la fonction cible est dans le champ d'application

DevTools génère une exception ReferenceError si la fonction que vous souhaitez déboguer n'est pas dans le champ d'application.

(function () {
  function hey() {
    console.log('hey');
  }
  function yo() {
    console.log('yo');
  }
  debug(yo); // This works.
  yo();
})();
debug(hey); // This doesn't work. hey() is out of scope.

S'assurer que la fonction cible est dans le champ d'application peut s'avérer délicat si vous appelez debug() à partir de la console DevTools. Voici une stratégie:

  1. Définissez un point d'arrêt par ligne de code à un endroit où la fonction est dans le champ d'application.
  2. Déclenchez le point d'arrêt.
  3. Appelez debug() dans la console DevTools lorsque le code est toujours mis en pause sur votre point d'arrêt de ligne de code.

Points d'arrêt Trusted Type

L'API Trusted Type offre une protection contre les failles de sécurité appelées attaques par script intersites (XSS).

Dans la section Points d'arrêt du panneau Sources, accédez à la section Points d'arrêt en cas de non-respect du FSC et activez l'une des options suivantes, ou les deux, puis exécutez le code:

  • Cochez Case à cocher. Non-respect (récepteur).

    Suspendu en cas de non-respect d'un évier lorsque la case correspondante est activée.

    Dans cet exemple, l'exécution est mise en pause en cas de non-respect d'un évier.

  • Cochez Case à cocher. Cas de non-respect des règles.

    Mise en veille en cas de non-respect des règles lorsque la case correspondante est cochée.

    Dans cet exemple, l'exécution est suspendue en cas d'infraction aux règles. Les règles Trusted Types sont configurées à l'aide de trustedTypes.createPolicy.

Pour en savoir plus sur l'utilisation de l'API: