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

en passant par le code JavaScript dans Google Chrome debugger, comment terminer l'exécution du script si Je ne veux pas continuer? La seule façon que j'ai trouvée est de fermer la fenêtre du navigateur.

presser "recharger cette page" exécute le reste du code et soumet même des formulaires comme si en pressant F8 "continuer".

mise à JOUR :

en appuyant sur F5 (rafraîchir) pendant qu'un script est mis 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 gèle. Cependant, IE a une option "Stop Debugging" qui, lorsqu'elle est pressée (à condition que vous n'ayez pas appuyé sur F5 plus tôt), continue d'exécuter le script en dehors du débogueur.
  • Firebug se comporte de façon identique à Chrome.

fermeture et puis d'ouvrir à nouveau la fenêtre du navigateur n'est pas toujours la meilleure façon suivante parce qu'il tuera l'état de session de navigateur et que cela peut être important. Tous vos points d'arrêt sont également perdues.

mise à JOUR (janvier 2014) :

rafraîchir pendant le débogage:

  • Chrome V31: permet aux scripts de s'exécuter et de s'arrêter sur d'autres points de rupture (mais ne soumet pas de requêtes ajax), puis se rafraîchit.
  • IE 11: refresh ne fait rien, mais vous pouvez appuyer sur F5 pour continuer.
  • Firefox v26: permet aux scripts de s'exécuter mais ne s'arrête pas sur d'autres points de rupture, soumet des requêtes ajax, puis rafraîchit.

sorte de progrès!

naviguez vers la même page tout en déboguant:

  • Chrome V31: identique à Refresh.
  • IE 11: les scripts sont terminés, une nouvelle session de navigateur est lancée (même comme fermeture et ouverture à nouveau).
  • Firefox v26: rien ne se passe.

aussi juacala suggère une solution efficace. Par exemple, si vous utilisez jQuery, exécuter supprimer $ de la console arrêtera l'exécution une fois n'importe quelle méthode jQuery rencontrée. Je l'ai testé dans tous les navigateurs susmentionnés et peut confirmer qu'il fonctionne.

mise à JOUR (Mars 2015) :

enfin, après plus de 2 ans et presque 10k vues, la bonne réponse a été donnée par Alexander K. Google Chrome a son propre Gestionnaire des tâches qui peut tuer un processus de tab sans fermer l'onglet lui-même, en gardant tous les points de rupture et autres choses intactes.

je suis même allé jusqu'à BrowserStack.com pour le tester dans Chrome v22 et a constaté que cela fonctionnait de cette façon même à ce moment-là.

Juacala's la solution de contournement est toujours utile lors du débogage dans IE ou Firefox.

146
demandé sur srgstm 2012-10-30 11:51:14

12 réponses

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

Menu → Plus D'Outils → Gestionnaire Des Tâches

vous pouvez sélectionner votre tâche de page et la terminer en appuyant sur" Fin Du processus " bouton.

149
répondu Alexander K 2015-06-30 17:53:00

une façon de le faire est de mettre en pause le script, regardez ce qui suit le code où vous êtes actuellement arrêté, par exemple:

var something = somethingElse.blah;

dans la console, faire ce qui suit:

delete somethingElse;

joue alors le script: il causera une erreur fatale quand il tentera d'accéder à somethingElse , et le script mourra. Voilà, vous avez terminé le script.

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

35
répondu juacala 2016-06-14 11:42:45

bonne question. Je pense que vous ne pouvez pas terminer l'exécution du script. Bien que je ne l'ai jamais cherché, j'utilise le débogueur chrome depuis longtemps au travail. Je mets habituellement des points d'arrêt dans mon code javascript et ensuite je débogue la partie du code qui m'intéresse. Quand j'ai fini de déboguer ce code, j'exécute habituellement le reste du programme ou je rafraîchis le navigateur.

Si vous voulez empêcher le reste du script soit exécuté (par exemple en raison D'appels AJAX qui vont être faits) la seule chose que vous pouvez faire est de supprimer ce code dans la console à la volée, empêchant ainsi ces appels d'être exécutés , alors vous pouvez exécuter le code restant sans problèmes.

j'espère que cela aide!

P. S: j'ai essayé de trouver une option pour terminer l'exécution dans quelques tutoriels / guides comme les suivants, mais je n'ai pas pu la trouver. Comme je l'ai dit avant, probablement il n'y a pas une telle option.

http://www.codeproject.com/Articles/273129/Beginner-Guide-to-Page-and-Script-Debugging-with-C

http://www.nsbasic.com/app/tutorials/TT10.htm

3
répondu Romén Rodríguez-Gil 2012-11-01 13:17:42

si vous rencontrez cela en utilisant la debugger déclaration,

debugger;

... alors je pense que la page va continuer à tourner pour toujours jusqu'à ce que le JS Runtime cède, ou la prochaine pause. En supposant que vous êtes en mode break-on-error (la bascule pause-icône), vous pouvez vous assurer qu'une pause se produit en faisant à la place quelque chose comme:

debugger;throw 1;

ou peut-être appeler une fonction inexistante:

debugger;z();

(bien sûr cela n'aide pas si vous essayez de passer à travers les fonctions, bien que peut-être vous pourriez dynamiquement ajouter dans un throw 1 ou z() ou quelque chose dans le panneau Sources, ctrl-S pour enregistrer, et puis ctrl-R pour rafraîchir... cela peut cependant sauter un point de rupture, mais peut fonctionner si vous êtes dans une boucle.)

si vous faites une boucle et que vous vous attendez à déclencher à nouveau la déclaration debugger , vous pouvez simplement taper throw 1 à la place.

throw 1;

puis quand vous frappez ctrl-R, le prochain lancer sera frappé, et la page se rafraîchira.

(testé avec Chrome v38, vers avril 2017)

3
répondu ninjagecko 2017-04-17 20:46:09

à partir de avril 2018, vous pouvez arrêter boucles infinies dans Chrome :

  1. ouvrir le sources panel.
  2. , Cliquez Sur Pause . Le bouton change en reprendre L'exécution du Script .
  3. Hold Reprise de l'Exécution du Script , puis sélectionnez l'Arrêt Appel JavaScript .
3
répondu James Gentes 2018-08-11 17:51:03

Vous pouvez le faire, mais vous devez préparer votre premier code.

Instructions pour arrêter l'exécution de script dans Google Chrome Dev Tools:

(1) Préparez d'abord votre code, en créant un global variable:

var devquit=0;
$(document).ready({
    //the rest of your code

(2) tout endroit où vous pourriez vouloir quitter, tester la valeur de cette variable:

//Lotsa code
if (devquit > 0) return false;

(3) arrêt de l'exécution du script sur ou avant la (Les) ligne (s) de test ci-dessus

(4) passer à la console

(5) Type:

> devquit
0
> devquit=1   <=== only this line is necessary
> devquit
1

(6) continuer l'exécution du script. Script va return false quand il exécute le test de l'étape (2) ci-dessus


Notes:

(A) cette astuce fonctionne avec des variables globales et des objets, mais elle ne fonctionnera pas avec des variables locales. noter que ce:

newVar = 'never used before';

crée une nouvelle propriété de l'objet fenêtre (fonctionne avec l'astuce ci-dessus)), tandis que:

var newVar = 'never used before';

crée une variable locale (ne fonctionne pas avec l'astuce ci-dessus!)

(B) Donc, vous pouvez toujours utiliser cette astuce avec le code déjà en cours d'exécution si vous avez soit une variable globale ou un objet qui retournera false s'il a une valeur donnée.

(C) dans une pincée, vous pouvez utiliser l'astuce de juacala et supprimer un élément du DOM (sur l'onglet elements) qui causera une erreur javascript. Par exemple, supposons que vous ayez le code var cartype = $('#cartype').val(); si vous supprimez L'élément avec ID = cartype avant cette ligne de code, puis le js cassera sur cette ligne. cependant, l'élément sera toujours absent lorsque vous tenterez de relancer le code. l'astuce décrite ci-dessus vous permet d'exécuter et de relancer le code ad infinitum.


plus de notes:

(a) Insérer le point de rupture dans le code: il suffit de taper debugger; sur une ligne seule. Si DevTools est ouvert, le script sautera dans le débogueur à ce point. Si DevTools n'ouvre pas, le code ignorera la déclaration.

(b) Voulez éviter de sauter dans la bibliothèque jQuery lors du débogage de code? Blackbox. Voir blackbox instructions pour Chrome - ou - pour Firefox


la Gratitude (veuillez consulter et upvote):

ligne de débogage Javascript ligne par ligne en utilisant Google Chrome

est-il possible de modifier les valeurs des variables javascript lors du débogage dans Google Chrome?

2
répondu gibberish 2017-05-23 12:18:21

si vous avez une boucle rogue, mettez en pause le code dans Google Chrome debugger (le petit bouton " || " alors que dans L'onglet Sources).

revenir à google Chrome lui-même, ouvrez le "Gestionnaire de Tâches" (Shift+ESC), sélectionnez votre onglet, cliquez sur le bouton "terminer le Processus".

vous recevrez le message AWW Snap puis vous pourrez recharger (F5).

comme d'autres l'ont noté, recharger la page au point d'arrêt est le même que redémarrer la boucle rogue et peut causer des verrous désagréables si le débogueur se bloque aussi (dans certains cas conduisant à redémarrer chrome ou même le PC). Le débogueur a besoin d'un bouton" Stop". Nb: la réponse acceptée est dépassée en ce sens que certains aspects de celle-ci sont apparemment erronés. Si vous me rejetez, Veuillez expliquer:) .

1
répondu www-0av-Com 2017-11-10 16:26:54

ouvrez l'onglet source dans "Developer Tools", cliquez sur un numéro de ligne dans un script en cours d'exécution, cela créera un point de rupture et le débogueur s'y brisera.

0
répondu Todd 2016-05-11 02:28:53

vous pouvez faire une pause sur n'importe quel motif XHR que je trouve très utile lors du débogage de ce genre de scénarios.

par exemple, j'ai donné le point de rupture sur un patron D'URL contenant " / "

enter image description here

0
répondu Abhi 2017-10-02 17:54:47

je crois que la réponse de James Gentes est correcte à partir de 2018. Maintenant, lorsque vous êtes mis en pause un point de pause, vous pouvez cliquer et maintenir le bouton Reprendre et il fera apparaître un dropdown-menu qui a un bouton d'arrêt.

0
répondu mhively 2018-08-29 19:46:06

la plupart du temps, je cherche à arrêter une boucle ou une minuterie qui change des éléments sur la page et m'empêche de les inspecter...

la plupart du temps, il est en utilisant jQuery donc je viens d'utiliser:

supprimer jQuery

-2
répondu 1984 2016-08-15 10:06:21