Annuler l'exécution de boucle infinie dans jsfiddle

Lorsque vous obtenez une boucle infinie dans jsfiddle dans Chrome, votre seul choix (que je connaisse) est de fermer l'onglet. Bien sûr, cela signifie que vous perdez tout votre travail dans la fenêtre actuelle! Existe-t-il un moyen facile d'arrêter un script d'exécution infinie?

  1. j'ai les outils de développement ouverts parce que je faisais du débogage.
  2. je suis capable de mettre en pause le script et de parcourir la boucle.
  3. Je ne trouve nulle part où arrêter le script.
  4. Je ne peux pas modifier le script ou variables pour arrêter la boucle infinie (parce que l'exécution du script se produit dans un iframe sur un domaine séparé, donc la modification des données dans l'iframe avec JavaScript n'est pas autorisée et génère une Exception dans la console).

Tout a commencé parce que j'ai décidé d'échanger des directions sur ma boucle à partir de

for (var c = 0; c <= 11; c++)

À

for (var c = 12; c > 0; c++)

Mais comme vous pouvez le voir ci-dessus, j'ai oublié de le changer de c++ à c--.

Des idées?? J'ai toujours l'onglet ouvert et j'espère le récupérer sans fermeture de l'onglet :-)

55
demandé sur fracz 2011-10-01 01:11:55

7 réponses

Avec le mode développeur, allez dans ressources et trouvez votre script et copiez-le et collez-le dans un document texte ou une nouvelle fenêtre. Si vous ne le trouvez pas dans les ressources, recherchez une variable ou une ligne de code que vous avez utilisée.

7
répondu mowwwalker 2017-02-27 11:17:27

Comment le faire sans Mode développeur:

  • ouvre un nouvel onglet
  • Ouvrez le Gestionnaire des tâches avec Shift-Escape
  • tuer la tâche
  • utilisez le bouton Retour pour l'onglet tué (JSFiddle n'exécutera pas le script)
  • Correction d'un bug
  • Mettre à jour
97
répondu Adam Ritter 2017-02-27 11:16:50

Une façon de briser la boucle infinie est de lancer une exception non gérée, ce qui arrêtera l'exécution de la pile d'appels en cours. Pour ce faire:

  1. mettre en pause le débogueur
  2. trouver une instruction prometteuse dans la boucle, par exemple un appel de fonction: foo.bar(args)
  3. dans la console, écrasez la fonction à lancer: foo.bar=function(){throw 42;}
  4. décompresser le débogueur

Travaillé pour moi. Je n'ai pas essayé, mais je crois qu'en surchargeant getter ou setter, vous pouvez utiliser l'astuce décrit ci-dessus également pour les affectations et les lectures, pas seulement pour les appels de fonction. De plus, en définissant une variable sur undefined, vous pouvez provoquer une erreur fatale (et donc casser la boucle) si le champ de cette variable est utilisé dans la boucle. Par exemple {[2] } va casser foo.tab[42] ou foo.tab.bar. Pour une raison quelconque, il suffit d'écrire foo=undefined dans la console (peut-être qu'il définit une variable locale à la fenêtre de la console nommée foo).

3
répondu qbolec 2013-05-12 12:00:14

Exécutez Process Explorer et tuez le processus chrome qui utilise beaucoup de CPU...it va "planter" la page et vous permettre de recharger...

1
répondu David 2012-04-10 16:17:45

Je ne pouvais pas démarrer le Gestionnaire des tâches de Chrome pendant que l'onglet looping était actif. Je devais sélectionner un autre onglet. Ensuite, j'ai appuyé sur Shift-Escape pour lancer le Gestionnaire des tâches, tuer le processus JSFiddle, re-sélectionner l'onglet, et appuyez sur le bouton Retour pour afficher la page sans exécuter le script.

Jsfiddle charge le panneau "résultat" à l'aide d'un iframe. En juin 2016, L'URL du cadre est L'URL de violon plus " / show/". J'ai inspecté le code source de l'iframe et découvert qu'il se charge encore une autre URL avec "/lumière/". L'une de ces URL doit contenir votre code source.

Si votre navigateur prend en charge le schéma d'URI view-source , Vous pouvez accéder au code source de votre violon comme suit:

  • view-source:jsfiddle.net/user_name/fiddle_hash/revision/light/
  • view-source:jsfiddle.net/user_name/fiddle_hash/revision/show/
1
répondu Lachmanski 2016-06-27 14:37:38

Le même problème est venu ici, j'ai ouvert la console javascript dans un État de script en pause. (Mis en pause à l'aide des outils de développement)

Ensuite, j'ai changé la valeur de la variable pour que la boucle while se termine.

0
répondu Rajavanya Subramaniyan 2012-01-07 17:40:31

Au cas où d'autres seraient bloqués après avoir lu les autres réponses, voici ce qui a fonctionné pour moi (Chrome, Mac). Pour moi, l'onglet JSFiddle était 'coincé' mais le reste de Chrome réactif. J'ai eu la Console JavaScript ouverte sur le volet ressources, mais elle ne répondait pas aussi. Recharger la page dans cet état n'a pas aidé parce que JSFiddle me donnerait le script avant que j'obtienne quoi que ce soit du tout.

En fin de compte, cela a fonctionné pour moi; peut-être que cela vous aidera aussi...

  • Alors que la page est ne répond pas, allez dans Chrome > Preferences > Privacy et désactivez JavaScript.
  • attendez que la page meure (environ 4 ou 5 minutes pour moi); l'icône du visage triste apparaît dans cet onglet.
  • appuyez sur le bouton Retour. Il devrait ressembler à JSFiddle est en train de charger, mais ce ne sera pas parce que jsfiddle a besoin de JavaScript juste pour rendre une page.
  • View > Developer > View source
  • mon script, légèrement mutilé, était assis là tout innocent comme dans un div appelé 'panel_js'.
  • Mettez en surbrillance, copiez, respirez à nouveau, apprenez leçon.
0
répondu kwinkunks 2014-12-22 02:01:30