Когда вы находитесь в бесконечном цикле или рекурсивных вызовах, в основном браузер перестает отвечать на что угодно (либо в Chrome, либо в FF). Вы не можете видеть журналы, не можете попасть в отладчик, даже не можете открыть консоль самостоятельно. Браузер просто замерзает. Это так раздражает. Кажется, я ничего не могу сделать, кроме как сидеть здесь, царапая мою голову... Кто-нибудь может пролить свет на то, как это решить?
Как отлаживать javascript, когда он переходит в бесконечные циклы и рекурсивные вызовы в Javascript?
Ответ 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
. Чтобы показать и включить флажок, нажмите на последний значок:
После включения этого отладчик делает паузу на каждое пойманное исключение.
Ответ 3
У меня были проблемы с Chrome, я бы посмотрел в окне браузера "Приостановлено в отладчике", но не мог увидеть, где, возможно, Chrome был запутан, так как он был в цикле... В Firefox он признал, что он слишком долго и затем всплывающее окно появляется через 30 секунд до 1 минуты, указывая, что файл и общая строка # его заморожены, что помогает отлаживать дальше и устанавливать точки останова в этой области.
Ответ 4
Я столкнулся с той же проблемой сегодня. Поиск решения привел меня к этому вопросу.
Тем временем я нашел решение для Chrome в его Примечаниях к выпуску (апрель 2018 г., https://developers.google.com/web/updates/2018/04/devtools#stop).
С уважением
Ответ 5
Вы можете остановить бесконечный цикл, используя следующий код.
debugger;