Отменить выполнение бесконечного цикла в jsfiddle



когда вы получите бесконечный цикл в jsfiddle в Chrome, ваш единственный выбор (что я знаю), чтобы закрыть вкладку. Конечно, это означает, что вы потеряете всю свою работу в текущем окне! Есть ли простой способ остановить бесконечно выполняющийся скрипт?




  1. у меня есть инструменты разработчика Open, потому что я делал некоторые отладки.

  2. Я могу приостановить сценарий и шаг через петлю.

  3. Я не могу найти нигде, чтобы остановить скрипт.

  4. I невозможно изменить сценарий или переменные, чтобы остановить бесконечный цикл (поскольку выполнение сценария происходит в iframe в отдельном домене, поэтому изменение данных в iframe с помощью JavaScript не допускается и создает исключение в консоли).


все началось, потому что я решил поменять направление на моем цикле от



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


до



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


но как вы можете видеть выше, я забыл изменить его с c++ до c--.



какие идеи?? У меня все еще открыта вкладка, и я надеюсь вернуть ее, не закрывая вкладку : -)

796   7  

7 ответов:

в режиме разработчика перейдите в ресурсы и найдите свой скрипт, скопируйте и вставьте его в текстовый документ или новое окно. Если вы не можете найти его в ресурсах, выполните поиск переменной или строки кода, который вы использовали.

Как это сделать без режима разработчика:

  • откройте новую вкладку
  • Откройте Диспетчер задач с помощью Shift-Escape
  • убить задание
  • используйте кнопку Назад для убитой вкладки (JSFiddle не будет работать скрипт)
  • исправление ошибок
  • обновление

один из способов разорвать бесконечный цикл, чтобы бросить необработанное исключение, которое остановит выполнение текущего стека вызовов. Для этого:

  1. пауза debbuger
  2. найдите многообещающий оператор внутри цикла, например вызов функции:foo.bar(args)
  3. в консоли, перезаписать функцию, чтобы бросить:foo.bar=function(){throw 42;}
  4. отключите отладчик

работал для меня. Я не пробовал, но я считаю, что путем перегрузки геттер или сеттер вы можете использовать трюк, описанный выше, также для назначений и чтения, а не только для вызовов функций. Кроме того, установив переменную в 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

    Ничего не найдено.