When you get an infinite loop in jsfiddle in Chrome, your only choice (that I know of) is to close the tab. Of course, this means you lose all your work in the current window! Is there an easy way to stop an infinitely executing script?
- I have the developer tools open because I was doing some debugging.
- I am able to pause the script and step through the loop.
- I can't find anywhere to stop the script.
- I can't modify the script or variables to stop the infinite loop (because the script execution occurs in an iframe on a separate domain, so modifying data in the iframe with JavaScript is not allowed and generates an Exception in the console).
It all started because I decided to swap directions on my loop from
for (var c = 0; c <= 11; c++)
to
for (var c = 12; c > 0; c++)
But as you can see above, I forgot to change it from c++
to c--
.
Any ideas?? I still have the tab open and I'm hoping to get it back without closing the tab :-)
How to do it without Developer Mode:
Same problem came up here, I opened up the javascript console in a script paused state. (Paused it using the Developer Tools)
Then I changed the variable value so that the while loop would end.
With the developer mode, go into resources and find your script and copy and paste it into a text document or a new window. If you can't find it in resources, do a search for a variable or line of code you used.
Run Process Explorer and kill the chrome process that's using lots of CPU...it will "crash" the page and let you reload...
One way of breaking the infinite loop is to throw an unhandled exception, which will stop the execution of current call stack. To do so:
foo.bar(args)
foo.bar=function(){throw 42;}
worked for me. I haven't tried, but I believe that by overloading getter or setter you can use the trick described above also for assignments and reads, not only for function calls. Also, by setting a variable to undefined, you may cause fatal error (and thus break the loop) if the field of this variable is used in the loop. For example
delete foo.tab
will breakfoo.tab[42]
orfoo.tab.bar
. For some reason, simply writtingfoo=undefined
in the console, will not do (perhaps it defines a variable local to the console window named foo).I had file stuck in a loop and would freeze up the dashboard on JSFiddle as well.