Отменить выполнение бесконечного цикла в jsfiddle
когда вы получите бесконечный цикл в jsfiddle в Chrome, ваш единственный выбор (что я знаю), чтобы закрыть вкладку. Конечно, это означает, что вы потеряете всю свою работу в текущем окне! Есть ли простой способ остановить бесконечно выполняющийся скрипт?
- у меня есть инструменты разработчика Open, потому что я делал некоторые отладки.
- Я могу приостановить сценарий и шаг через петлю.
- Я не могу найти нигде, чтобы остановить скрипт.
- I невозможно изменить сценарий или переменные, чтобы остановить бесконечный цикл (поскольку выполнение сценария происходит в iframe в отдельном домене, поэтому изменение данных в iframe с помощью JavaScript не допускается и создает исключение в консоли).
все началось, потому что я решил поменять направление на моем цикле от
for (var c = 0; c <= 11; c++)
до
for (var c = 12; c > 0; c++)
но как вы можете видеть выше, я забыл изменить его с c++ до c--.
какие идеи?? У меня все еще открыта вкладка, и я надеюсь вернуть ее, не закрывая вкладку : -)
7 ответов:
в режиме разработчика перейдите в ресурсы и найдите свой скрипт, скопируйте и вставьте его в текстовый документ или новое окно. Если вы не можете найти его в ресурсах, выполните поиск переменной или строки кода, который вы использовали.
Как это сделать без режима разработчика:
- откройте новую вкладку
- Откройте Диспетчер задач с помощью Shift-Escape
- убить задание
- используйте кнопку Назад для убитой вкладки (JSFiddle не будет работать скрипт)
- исправление ошибок
- обновление
один из способов разорвать бесконечный цикл, чтобы бросить необработанное исключение, которое остановит выполнение текущего стека вызовов. Для этого:
- пауза debbuger
- найдите многообещающий оператор внутри цикла, например вызов функции:
foo.bar(args)- в консоли, перезаписать функцию, чтобы бросить:
foo.bar=function(){throw 42;}- отключите отладчик
работал для меня. Я не пробовал, но я считаю, что путем перегрузки геттер или сеттер вы можете использовать трюк, описанный выше, также для назначений и чтения, а не только для вызовов функций. Кроме того, установив переменную в undefined, вы можете вызвать фатальную ошибку (и, таким образом, разорвать цикл), если поле этой переменной используется в цикле. Например
delete foo.tabсломаетсяfoo.tab[42]илиfoo.tab.bar. Почему-то просто пишуfoo=undefinedв консоли не будет делать (возможно, он определяет переменную, локальную для окна консоли с именем foo).
запустите Process Explorer и убейте процесс chrome, который использует много CPU...it будет "сбой" страницы и позволит вам перезагрузить...
Я не мог запустить Диспетчер задач Chrome, пока была активна вкладка цикла. Мне пришлось выбрать другую вкладку. Затем я нажал Shift-Escape, чтобы запустить Диспетчер задач, убить процесс JSFiddle, повторно выбрать вкладку и нажать кнопку "назад", чтобы отобразить страницу без запуска сценария.
JSFiddle загружает панель "результат" с помощью iframe. По состоянию на июнь 2016 года URL-адрес для фрейма-это URL-адрес скрипки плюс "/show/". Я проверил исходный код iframe и обнаружил, что он загружает еще один URL с " / light/". Один из этих URL-адресов должен содержать исходный код.
Если ваш браузер поддерживает view-source URI scheme, вы можете получить доступ к исходному коду вашей мандолины следующим образом:
- view-source:jsfiddle.net/user_name/fiddle_hash/revision/light/
- view-source:jsfiddle.net/user_name/fiddle_hash/revision/show/
та же проблема возникла здесь, я открыл консоль javascript в состоянии приостановки скрипта. (Приостановил его с помощью инструментов разработчика)
затем я изменил значение переменной, чтобы цикл while закончился.
в случае, если другие застряли после прочтения других ответов, вот что сработало для меня (Chrome, Mac). Для меня вкладка JSFiddle была "застряла", но остальная часть Chrome отзывчива. У меня была консоль JavaScript, открытая на панели ресурсов, но она тоже не отвечала. Перезагрузка страницы в этом состоянии не помогла, потому что JSFiddle даст мне сценарий, прежде чем я получу что-либо вообще.
В конце концов это сработало для меня, может быть, это поможет вам тоже...
- пока страница не отвечает, перейдите в
Chrome > Preferences > Privacyи отключить JavaScript.- подождите, пока страница умрет (около 4 или 5 минут для меня); на этой вкладке появляется значок грустного лица.
- Нажмите кнопку "Назад". Он должен выглядеть так, как будто jsfiddle загружается, но это не так, потому что, как ни странно, JSFiddle нуждается в JavaScript только для визуализации страницы.
View > Developer > View source- мой сценарий, только слегка искореженный, сидел там весь невинный, как в A
divназывается'panel_js'.- выделите, скопируйте, снова дышите, изучите урок.
Comments