Annuler l'exécution de la boucle infinie dans jsfiddle
Lorsque vous obtenez une boucle infinie dans jsfiddle en Chrome, votre seul choix (que je connais) est de fermer l'onglet. Bien sûr, cela signifie que vous perdez tout votre travail dans la fenêtre en cours! Est-il un moyen facile d'arrêter de un à l'infini de l'exécution du script?
- J'ai les outils de développement de l'ouvrir, car je faisais un peu de débogage.
- Je suis capable de mettre en pause le script et pas à travers la boucle.
- Je ne peux pas trouver n'importe où pour arrêter le script.
- Je ne peux pas modifier le script ou variables pour arrêter la boucle infinie (car à l'exécution de script se produit dans une iframe sur un domaine distinct, de sorte que la modification de données dans l'iframe avec le JavaScript n'est pas autorisé et génère une Exception dans la console).
Tout a commencé parce que j'ai décidé de permuter les directions sur ma boucle 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 changer de c++
à c--
.
Des idées?? J'ai toujours l'onglet ouvrir et je suis l'espoir de le récupérer sans fermer l'onglet 🙂
- Ne pouvez-vous pas changer la valeur de c dans le débogueur?
- Firefox détecte les boucles infinies et les arrête
- Chrome devrait finir de vous demander si vous voulez tuer le script, si vous le laissez aller.
- Bon à savoir, mais ça ne veut pas l'aider. J'ai juste reproduit une boucle infinie, et n'ont pas trouvé un moyen d'obtenir entre les deux. Toujours essayer.
- Il fonctionne pendant environ 10 minutes (c =
9494127
) et il n'a pas encore m'a demandé si je veux arrêter le script. Dois-je laisser le focus sur la fenêtre pendant un certain temps, d'abord? EDIT: j'ai reçu le message, mais le seul choix est deKill Pages
, ne pas arrêter le script. Qui va perdre toutes mes données. - Hmm. Qu'est-ce le hasard downvote après presque un an?
- Que vous ont dit dans une réponse ci-dessous, je suis content que vous avez eu de la chance d'avoir des outils de dev ouvert et ont été en mesure de récupérer votre code. Mais si ce n'était pas le cas, ne serait pas
"c"
finalement enrouler autour de"0"
(ou dépassement de capacité) et puis la sortie de la boucle?
Vous devez vous connecter pour publier un commentaire.
Avec le mode développeur, aller dans les ressources et trouver votre script et de le copier et de le coller dans un document texte ou une nouvelle fenêtre. Si vous ne pouvez pas le trouver dans les ressources, de faire une recherche pour une variable ou d'une ligne de code que vous avez utilisé.
Comment le faire sans le Mode Développeur:
Une manière de rompre la boucle infinie est de lancer une exception non gérée, permet d'arrêter l'exécution de la pile d'appel en cours.
Pour ce faire:
foo.bar(args)
foo.bar=function(){throw 42;}
a fonctionné pour moi. Je n'ai pas essayé, mais je crois que par la surcharge getter ou un setter vous pouvez utiliser l'astuce décrite ci-dessus pour les affectations et les lectures, non seulement pour les appels de fonction. Aussi, par la définition d'une variable indéfinie, vous risquez de provoquer d'erreur fatale (et donc de briser la boucle) si le champ de cette variable est utilisée dans la boucle. Par exemple
delete foo.tab
casserafoo.tab[42]
oufoo.tab.bar
. Pour une raison quelconque, il suffit d'écrirefoo=undefined
dans la console, ne le fera pas (peut-être qu'il définit une variable locale à la fenêtre de la console nommée foo).Exécuter l'Explorateur de Processus et de tuer le chrome processus qui utilise beaucoup de CPU...il sera le "crash" la page, et vous permettent de recharger...
Je ne pouvais pas démarrer google Chrome, le Gestionnaire des Tâches alors que le bouclage de l'onglet est actif. J'ai eu pour sélectionner un autre onglet. Puis j'ai appuyé sur Maj-Escape pour lancer le Gestionnaire de Tâches, de tuer le JSFiddle processus de re-sélectionner l'onglet, puis cliquez sur le bouton précédent pour afficher la page sans l'exécution du script.
JSFiddle charge le "résultat" du panneau à l'aide d'un iframe. En juin 2016, l'URL de l'image est le Violon URL plus "/show/". J'ai vérifié le code source de l'iframe et découvert qu'il charge encore une autre URL avec "/lumière/". L'une de ces Url doit contenir votre code source.
Si votre navigateur prend en charge les view-source schéma d'URI, vous pouvez accéder à vos violons du code source comme suit:
Même problème est venu ici, j'ai ouvert la console javascript dans un script en état de pause. (En pause à l'aide des Outils de développement)
Puis j'ai changé la valeur de la variable de sorte que la boucle while serait la fin.
Dans le cas où d'autres sont bloqués après avoir lu les autres réponses, voici ce qui a fonctionné pour moi (Chrome, Mac). Pour moi, le JSFiddle onglet a été "collé", mais le reste de Chrome réactif. J'ai eu la Console JavaScript ouvrir sur le volet Ressources, mais il ne répondait pas trop. Le rechargement de la page dans cet état n'aide pas, parce que JSFiddle pourrait me donner le script avant que j'ai eu quoi que ce soit.
En fin de compte cela a fonctionné pour moi; peut-être que ça va vous aider...
Chrome > Preferences > Privacy
et de désactiver le JavaScript.View > Developer > View source
div
appelé'panel_js'
.J'avais fichier bloqué dans une boucle et de geler le tableau de bord sur JSFiddle ainsi.