Подтвердить что ты не робот

Как отлаживать javascript, когда он переходит в бесконечные циклы и рекурсивные вызовы в Javascript?

Когда вы находитесь в бесконечном цикле или рекурсивных вызовах, в основном браузер перестает отвечать на что угодно (либо в Chrome, либо в FF). Вы не можете видеть журналы, не можете попасть в отладчик, даже не можете открыть консоль самостоятельно. Браузер просто замерзает. Это так раздражает. Кажется, я ничего не могу сделать, кроме как сидеть здесь, царапая мою голову... Кто-нибудь может пролить свет на то, как это решить?

4b9b3361

Ответ 1

Еще один трюк, который вы можете попробовать, - это открыть инструменты веб-разработчика в Chrome и попытаться нажать "Пауза", когда видится браузер. Затем он должен сломаться в строке, в которой он выполняется. С некоторым выходом вы должны дойти до конца.

Предполагая, что вы знаете (или подозреваете) функцию, в которой происходит цикл infite, вы можете добавить такой код:

var calls = 0;
function iSuspectToBeLoopingInfititely() {
  calls += 1;
  if (calls > 100) { debugger; }
}

Это остановит отладчик JavaScript в Chrome, как только метод будет вызван 100 раз. Примечание. Chrome будет разорваться только на вызовы debugger;, если у вас действительно открыто окно инструментов разработчика.

Ответ 2

Нашел другой способ отладки. В моем случае ошибка была обнаружена, и поэтому не было ошибок при входе в консоль. Нашел ошибку с флажком Pause on caught exceptions. Вы найдете эту опцию в инструментах den dev на вкладке Sources. Чтобы показать и включить флажок, нажмите на последний значок:

enter image description here

После включения этого отладчик делает паузу на каждое пойманное исключение.

Ответ 3

У меня были проблемы с Chrome, я бы посмотрел в окне браузера "Приостановлено в отладчике", но не мог увидеть, где, возможно, Chrome был запутан, так как он был в цикле... В Firefox он признал, что он слишком долго и затем всплывающее окно появляется через 30 секунд до 1 минуты, указывая, что файл и общая строка # его заморожены, что помогает отлаживать дальше и устанавливать точки останова в этой области.

Ответ 4

Я столкнулся с той же проблемой сегодня. Поиск решения привел меня к этому вопросу.

Тем временем я нашел решение для Chrome в его Примечаниях к выпуску (апрель 2018 г., https://developers.google.com/web/updates/2018/04/devtools#stop).

С уважением

Ответ 5

Вы можете остановить бесконечный цикл, используя следующий код.

debugger;