web-dev-qa-db-fra.com

Annuler l'exécution d'une boucle infinie dans jsfiddle

Lorsque vous obtenez une boucle infinie dans jsfiddle dans Chrome, votre seul choix (à ma connaissance) 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 à 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 aucun endroit pour arrêter le script.
  4. Je ne peux pas modifier le script ni les variables pour arrêter la boucle infinie (car l'exécution du script se produit dans une iframe située sur un domaine distinct, 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 les instructions sur ma boucle

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 le fermer :-)

55
mellamokb

En mode développeur, accédez aux ressources, recherchez votre script, 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
mowwwalker

Comment le faire sans mode développeur:

  • Ouvrir un nouvel onglet
  • Ouvrez le gestionnaire de tâches avec Shift-Escape
  • Tuer la tâche
  • Utilise le bouton Précédent pour l'onglet tué (JSFiddle n'exécutera pas le script)
  • Réparer le bug
  • Mettre à jour
97
Adam Ritter

Une façon de rompre la boucle infinie consiste à générer une exception non gérée, qui interrompt l'exécution de la pile d'appels en cours .

  1. mettre en pause le débogueur
  2. recherchez 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. libérer le débogueur 

a travaillé pour moi. Je n'ai pas essayé, mais je pense qu'en surchargeant le getter ou le setter, vous pouvez utiliser l'astuce décrite ci-dessus également pour les assignations et les lectures, pas seulement pour les appels de fonction. De plus, en définissant une variable sur non définie, vous pouvez provoquer une erreur fatale (et donc rompre la boucle) si le champ de cette variable est utilisé dans la boucle. Par exemple, delete foo.tab cassera foo.tab[42] ou foo.tab.bar. Pour une raison quelconque, il ne suffit pas d'écrire foo=undefined dans la console (cela définit peut-être une variable locale dans la fenêtre de la console nommée foo).

3
qbolec

Je ne pouvais pas démarrer le gestionnaire de tâches de Chrome tant que l'onglet Boucle était actif. Je devais sélectionner un autre onglet. Puis j'ai appuyé sur Shift-Escape pour lancer le gestionnaire de tâches, interrompre le processus JSFiddle, sélectionner à nouveau l'onglet, puis appuyer sur le bouton Précédent pour afficher la page sans exécuter le script.

JSFiddle charge le panneau "result" à l'aide d'une iframe. Depuis juin 2016, l'URL du cadre est l'URL Fiddle plus "/ show /". J'ai inspecté le code source de l'iframe et découvert qu'il chargeait encore une autre URL avec "/ light /". 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/nom_utilisateur/fiddle_hash/revision/light/
  • view-source: jsfiddle.net/nom_utilisateur/fiddle_hash/revision/show/
1
Lachmanski

Lancez Process Explorer et supprimez le processus chrome qui utilise beaucoup de ressources CPU ... cela "plantera" la page et vous permettra de recharger ...

1
David

J'avais un fichier coincé dans une boucle et je bloquais aussi le tableau de bord sur JSFiddle. 

  • La seule façon pour moi de nettoyer était de désactiver JavaScript dans l'onglet Préférences pendant qu'une page Nouveau Fiddle était ouverte dans un autre onglet Chrome.
  • Ensuite, accédez à Tous les violons.
  • Supprimez le Fiddle et vous obtiendrez une erreur 404.
  • Activez JavaScript et rechargez le tableau de bord.
  • A pu continuer à fabriquer et éditer des violons par la suite.
0
Brad Lensing

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

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

0

Si d’autres sont 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 «bloqué», mais le reste de Chrome répondait correctement. La console JavaScript était ouverte dans le volet Ressources, mais elle ne répondait pas non plus. Recharger la page dans cet état n'a pas aidé car JSFiddle m'a donné le script avant que je ne reçois quoi que ce soit.

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

  • Pendant que la page ne répond pas, allez à 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. Cela devrait ressembler au chargement de JSFiddle, mais ce n’est pas parce que JSFiddle a besoin de JavaScript pour rendre une page.
  • View > Developer > View source
  • Mon script, seulement légèrement mutilé, était assis là, tout innocent comme dans un div appelé 'panel_js'.
  • Mettez en surbrillance, copiez, respirez à nouveau, apprenez une leçon.
0
kwinkunks