Как завершить выполнение script при отладке в Google Chrome?

Как выполнить код JavaScript в отладчике Google Chrome, как прекратить выполнение скрипта, если я не хочу продолжать? Единственный способ, который я нашел, это закрыть окно браузера.

Нажатие "Перезагрузить эту страницу" запускает остальную часть кода и даже отправляет формы, как если бы вы нажимали F8 "Продолжить".

ОБНОВЛЕНИЕ:

При нажатии F5 (Обновить) во время приостановки скрипта:

  • Google Chrome (v22) запускает скрипт. Если скрипт отправляет HTTP-запрос, отображается HTTP-ответ на этот запрос. Исходная страница не обновляется.
  • IE 9 просто зависает. Однако в IE есть опция "Остановить отладку", которая при нажатии (при условии, что вы не нажимали F5 ранее) продолжает запускать сценарий вне отладчика.
  • Firebug ведет себя идентично Chrome.

Закрытие, а затем повторное открытие окна браузера не всегда является следующим простым способом, поскольку он уничтожает состояние сеанса браузера, и это может быть важно. Все ваши точки останова также потеряны.

ОБНОВЛЕНИЕ (январь 2014):

Обновить во время отладки:

  • Chrome v31: позволяет запускать сценарии и останавливается на дальнейших точках останова (но не отправляет ajax-запросы), затем обновляется.
  • IE 11: обновление ничего не делает, но вы можете нажать F5, чтобы продолжить.
  • Firefox v26: позволяет запускать сценарии, но не останавливается на дальнейших точках останова, отправляет запросы ajax, а затем обновляет.

Вид прогресса!

Перейдите на ту же страницу во время отладки:

  • Chrome v31: такой же, как Refresh.
  • IE 11: сценарии завершены, новый сеанс браузера запущен (аналогично закрытию и открытию снова).
  • Firefox v26: ничего не происходит.

Также Juacala предложил эффективный обходной путь. Например, если вы используете jQuery, запуск delete $ из консоли остановит выполнение, как только встретится любой метод jQuery. Я протестировал его во всех вышеперечисленных браузерах и могу подтвердить, что он работает.

ОБНОВЛЕНИЕ (март 2015):

Наконец, после 2 лет и почти 10 тысяч просмотров правильный ответ дал Александр К. В Google Chrome есть собственный диспетчер задач, который может завершить процесс вкладки, не закрывая саму вкладку, сохраняя все точки останова и другие элементы в целости и сохранности.

Я даже дошел до BrowserStack.com, чтобы протестировать его в Chrome v22, и обнаружил, что это работает даже в то время.

Обходной путь Juacala по-прежнему полезен при отладке в IE или Firefox.

ОБНОВЛЕНИЕ (январь 2019):

Наконец-то в Chrome Dev Tools добавлен правильный способ остановить выполнение скрипта, что приятно (хотя и немного скрыто). За подробностями обращайтесь к ответу Джеймса Гентеса.

+188
источник поделиться
13 ответов

В Chrome есть "Диспетчер задач", доступный через Shift + ESC или через

Меню → Больше инструментов → Диспетчер задач

Вы можете выбрать задачу своей страницы и завершить ее, нажав кнопку "Завершить процесс".

+178
источник

С апреля 2018 года в Chrome можно останавливать бесконечные циклы:

  1. Откройте панель Источники в Инструментах разработчика (Ctrl+ Shift + I).
  2. Нажмите кнопку Пауза, чтобы приостановить выполнение сценария.

Также обратите внимание на сочетания клавиш: F8 и Ctrl+ \

enter image description here

+71
источник

Один из способов сделать это - приостановить script, посмотреть, какой код следует, где вы сейчас остановились, например:

var something = somethingElse.blah;

В консоли выполните следующие действия:

delete somethingElse;

Затем воспроизведите script: это приведет к фатальной ошибке при попытке доступа к somethingElse, а script умрет. Voila, вы закончили script.

EDIT: Первоначально я удалил переменную. Это не очень хорошо. Вы должны удалить функцию или объект, к которому JavaScript пытается получить доступ к свойству.

+37
источник

Ссылаясь на ответ @scottndecker на следующий question, chrome теперь предоставляет параметр "отключить JavaScript" в разделе "Инструменты разработчика":

  • Вертикальный ... в верхнем правом углу
  • Настройки
  • И в разделе "Настройки" перейдите в раздел "Отладчик" в самом низу и выберите "Отключить JavaScript"

Хорошо, что вы можете остановиться и повторить снова, просто проверив/сняв флажок.

+4
источник

Хороший вопрос здесь. Я думаю, вы не можете завершить выполнение script. Хотя я никогда не искал этого, я довольно долго использовал хром-отладчик на работе. Я обычно устанавливаю точки останова в своем javascript-коде, а затем отлаживаю часть кода, который мне интересен. Когда я заканчиваю отладку этого кода, я обычно просто запускаю оставшуюся часть программы или обновляю браузер.

Если вы хотите запретить выполнение оставшейся части script (например, из-за вызовов AJAX, которые будут сделаны) , единственное, что вы можете сделать, это удалить этот код в консоли on- поэтому, чтобы эти вызовы не выполнялись, вы можете без проблем выполнить оставшийся код.

Надеюсь, это поможет!

P.S: Я попытался найти вариант для завершения выполнения в некоторых учебниках/руководствах, таких как следующие, но не смог найти его. Как я уже говорил, вероятно, такого варианта нет.

http://www.codeproject.com/Articles/273129/Beginner-Guide-to-Page-and-Script-Debugging-with-C

http://www.nsbasic.com/app/tutorials/TT10.htm

+3
источник

Если вы столкнулись с этим при использовании инструкции debugger,

debugger;

... тогда я думаю, что страница будет продолжаться вечно до тех пор, пока не будет выполнена работа js runtime, или следующий разрыв. Предполагая, что вы находитесь в режиме break-on-error (переключение паузы), вы можете гарантировать, что произойдет разрыв, вместо этого сделайте что-то вроде:

debugger;throw 1;

или, возможно, вызовите несуществующую функцию:

debugger;z();

(Конечно, это не поможет, если вы пытаетесь выполнить функции, хотя, возможно, вы можете динамически добавлять в throw 1 или z() или somesuch на панели Sources, ctrl-S для сохранения, а затем ctrl-R для обновления... это может, однако, пропустить одну точку останова, но может работать, если вы находитесь в цикле.)

Если вы делаете цикл и ожидаете запускать оператор debugger снова, вы можете просто ввести throw 1 вместо этого.

throw 1;

Затем, когда вы нажмете ctrl-R, следующий бросок будет поражен, и страница обновится.

(протестирован с Chrome v38, около апреля 2017 года)

+3
источник

Вы можете сделать это, но сначала вы должны подготовить свой код.

Инструкции по остановке выполнения script в Google Chrome Dev Tools:

(1) Сначала подготовьте свой код, создав переменную global:

var devquit=0;
$(document).ready({
    //the rest of your code

(2) В любом месте, где вы, возможно, захотите выйти, проверьте значение этой переменной:

//Lotsa code
if (devquit > 0) return false;

(3) Приостановить выполнение script на или перед предыдущей тестовой линией

(4) Переключиться на консоль

(5) Тип:

> devquit
0
> devquit=1   <=== only this line is necessary
> devquit
1

(6) Продолжить выполнение script. script будет return false, когда он выполнит тест с шага (2) выше


Примечания:

(A) Этот трюк работает с глобальными переменными и объектами, но он не будет работать с локальными переменными. Обратите внимание, что это:
newVar = 'never used before';
создает новое свойство оконного объекта (работает с трюком выше), , пока это:
var newVar = 'never used before';
создает локальную переменную (НЕ работает с трюком выше!)

(B) Итак, вы все равно можете использовать этот трюк с уже запущенным кодом , если у вас есть глобальная переменная или объект, который вернет false, если он имеет заданное значение.

(C) В крайнем случае вы можете использовать трюк juacala и удалить элемент из DOM (на вкладке элементов), который вызовет ошибку javascript. Например, предположим, что у вас есть код var cartype = $('#cartype').val(); Если вы удалите элемент с ID = cartype до этой строки кода, тогда js будет разбиваться на эту строку. Однако при попытке повторного запуска кода элемент все равно будет отсутствовать. Трюк, описанный выше, позволяет вам запускать и повторно запускать код ad infinitum.


Дополнительные примечания:

(a) Вставьте точку останова в код: просто введите debugger; в строке. Если DevTools открыт, script перейдет в отладчик в этот момент. Если DevTools не открывается, код будет игнорировать оператор.

(b) Хотите избежать перехода в библиотеку jQuery при отладке кода? Blackbox это. См. инструкции Blackbox для Chrome - или - для Firefox


Благодарность (пожалуйста, посетите и перейдите):

Отладка Javascript по строкам с помощью Google Chrome

Возможно ли изменить значения переменной javascript во время отладки в Google Chrome?

+2
источник

Если у вас есть петля изгоев, приостановите код в отладчике Google Chrome (маленькая кнопка || ", находясь на вкладке Sources).

Вернитесь к самому Chrome, откройте "Диспетчер задач" (Shift + ESC), выберите вкладку, нажмите кнопку "Завершить процесс".

Вы получите сообщение All Snap, а затем вы можете перезагрузить (F5).

Как отмечали другие, перезагрузка страницы в момент паузы такая же, как перезапуск петли изгоев и может вызвать неприятные блокировки, если отладчик также блокирует (в некоторых случаях приводя к перезапуску хром или даже ПК). Отладчику нужна кнопка "Стоп". Nb: принятый ответ устарел, поскольку некоторые его аспекты теперь, по-видимому, ошибочны. Если вы проголосуете меня, попросите объяснить:).

+1
источник

Откройте вкладку источника в "Инструментах разработчика", щелкните номер строки в запущенном script, это создаст точку останова, и отладчик там сломается.

0
источник

Вы можете приостановить любой шаблон XHR, который я считаю очень полезным при отладке этих сценариев.

Например, я дал точку останова в шаблоне URL, содержащем "/"

введите описание изображения здесь

0
источник

Я считаю, что ответ Джеймса Гентеса на 2018 год верный. Теперь, когда вы остановили остановку, вы можете нажать и удерживать кнопку возобновления, и она вызовет выпадающее меню с кнопкой остановки.

0
источник

Есть много подходящих решений этой проблемы, как упомянуто выше в этом посте, но я нашел небольшой взлом, который может быть вставлен в скрипт или вставлен в консоль Chromes (отладчик) для достижения этой цели:

jQuery(window).keydown(function(e) { if (e.keyCode == 123) debugger; });

Это приведет к приостановке выполнения, когда вы нажмете F12.

0
источник

В большинстве случаев я ищу, чтобы остановить цикл или таймер, который меняет элементы на странице и не позволяет мне их проверять...

В большинстве случаев он использует jQuery, поэтому я просто использую:

удалить jQuery

-4
источник

Посмотрите другие вопросы по меткам или Задайте вопрос