266 votes

Comment mettre fin à l'exécution du script lors du débogage dans Google Chrome ?

Lorsque je parcours le code JavaScript dans le débogueur de Google Chrome, comment puis-je mettre fin à l'exécution du script si je ne veux pas continuer ? Le seul moyen que j'ai trouvé est de fermer la fenêtre du navigateur.

En appuyant sur "Recharger cette page", on exécute le reste du code et on soumet même les formulaires comme si on appuyait sur F8 "Continuer".

UPDATE :

Lorsque vous appuyez sur F5 (Rafraîchir) alors qu'un script est en pause :

  • Google Chrome (v22) exécute le script. Si le script soumet une requête HTTP, la réponse HTTP pour cette requête est affichée. La page originale n'est pas rafraîchie.
  • IE 9 se fige. Cependant, IE dispose d'une option "Stop Debugging" qui, lorsqu'elle est pressée (à condition que vous n'ayez pas appuyé sur F5 auparavant), continue à exécuter le script en dehors du débogueur.
  • Firebug se comporte de manière identique à Chrome.

Fermer puis rouvrir la fenêtre du navigateur n'est pas toujours le moyen le plus simple de le faire parce que cela va tuer l'état de la session du navigateur et cela peut être important. Tous vos points d'arrêt sont également perdus.

MISE À JOUR (janvier 2014) :

Rafraîchir pendant le débogage :

  • Chrome v31 : laisse scripts s'exécuter et s'arrête sur d'autres points d'arrêt (mais ne soumet pas de requêtes ajax), puis rafraîchit.
  • IE 11 : le rafraîchissement ne fait rien, mais vous pouvez appuyer sur F5 pour continuer.
  • Firefox v26 : laisse scripts s'exécuter mais ne s'arrête pas sur d'autres points d'arrêt, soumet des requêtes ajax, puis rafraîchit.

Une sorte de progrès !

Naviguez vers la même page pendant le débogage :

  • Chrome v31 : même chose que Refresh.
  • IE 11 : scripts sont terminés, une nouvelle session du navigateur est lancée (identique à la fermeture et à la réouverture).
  • Firefox v26 : rien ne se passe.

Aussi juacala a suggéré une solution de contournement efficace. Par exemple, si vous utilisez jQuery, exécuter supprimez le $ de la console arrêtera l'exécution dès qu'une méthode jQuery sera rencontrée. Je l'ai testé dans tous les navigateurs ci-dessus et je peux confirmer que cela fonctionne.

MISE À JOUR (mars 2015) :

Enfin, après plus de 2 ans et près de 10 000 consultations, la bonne réponse a été donnée par Alexander K. Google Chrome possède son propre gestionnaire de tâches qui permet de tuer un processus d'onglet. sin fermer l'onglet lui-même, en conservant tous les points d'arrêt et autres éléments intacts.

Je suis même allé jusqu'à BrowserStack.com pour le tester dans Chrome v22 et j'ai constaté que cela fonctionnait de cette façon même à cette époque.

La solution de rechange de Juacala reste utile pour le débogage dans IE ou Firefox.

MISE À JOUR (janvier 2019) :

Chrome Dev Tools a enfin ajouté un moyen approprié d'arrêter l'exécution de script, ce qui est bien (bien qu'un peu caché). Reportez-vous à la réponse de James Gentes pour plus de détails.

204voto

Alexander K Points 2378

Dans Chrome, il y a le "Gestionnaire des tâches", accessible via Shift + ESC ou par

Menu → Autres outils → Gestionnaire des tâches

Vous pouvez sélectionner la tâche de votre page et la terminer en appuyant sur le bouton "End Process".

149voto

James Gentes Points 194

A partir de Avril 2018, vous pouvez arrêter les boucles infinies dans Chrome. :

  1. Abrir el Sources dans les Outils du développeur ( Ctrl + Shift + I **).
  2. Cliquez sur le bouton Pause pour Pause de l'exécution du script. .

Notez également les touches de raccourci : F8 y Ctrl + \

enter image description here

90voto

Dan Dascalescu Points 8165

2020 Mise à jour d'avril

Depuis Chrome 80, aucune des réponses actuelles ne fonctionne. Il n'y a pas de bouton "Pause" visible - vous devez cliquer longuement sur le bouton "Lecture" pour accéder à l'icône "Arrêt" :

Stop script execution in Chrome DevTools

39voto

juacala Points 576

Une façon de le faire est de mettre en pause le script, de regarder quel code suit là où vous êtes actuellement arrêté, par ex :

var something = somethingElse.blah;

Dans la console, faites ce qui suit :

delete somethingElse;

Ensuite, jouez le script : il provoquera une erreur fatale lorsqu'il essaiera d'accéder à somethingElse et le script mourra. Voilà, vous avez terminé le script.

EDIT : A l'origine, j'ai supprimé une variable. Ce n'est pas suffisant. Vous devez supprimer une fonction ou un objet dont JavaScript tente d'accéder à une propriété.

9voto

ninjagecko Points 25709

Si vous rencontrez ce problème lors de l'utilisation du debugger déclaration,

debugger;

... alors je pense que la page continuera à tourner indéfiniment jusqu'à ce que le runtime js cède, ou jusqu'à la prochaine pause. En supposant que vous êtes en mode "break-on-error" (l'icône de pause à bascule), vous pouvez vous assurer qu'un break se produise en faisant quelque chose comme ceci :

debugger;throw 1;

ou peut-être appeler une fonction inexistante :

debugger;z();

(Bien sûr, cela n'aide pas si vous essayez de passer d'une fonction à l'autre, mais vous pourriez peut-être ajouter dynamiquement une fonction throw 1 o z() ou quelque chose du genre dans le panneau des sources, ctrl-S pour sauvegarder, puis ctrl-R pour rafraîchir... ceci peut cependant sauter un point d'arrêt, mais peut fonctionner si vous êtes dans une boucle).

Si vous effectuez une boucle et que vous vous attendez à déclencher la fonction debugger Encore une fois, vous pourriez simplement taper throw 1 à la place.

throw 1;

Ensuite, lorsque vous appuyez sur ctrl-R, le lancer suivant sera effectué, et la page sera rafraîchie.

(testé avec Chrome v38, vers avril 2017)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X