JavaScript: есть ли способ заставить Chrome сломать все ошибки?

258

Я ищу в Chrome эквивалент функциональности Firebug "разбить на все ошибки". На вкладке «Сценарии» Chrome имеет «паузу для всех исключений», но это не совсем то же самое, что разбивать все ошибки.

Например, при загрузке страницы с помощью следующего кода я бы хотел, чтобы Chrome ломался в строке foo.bar = 42. Вместо этого даже при включении «Пауза для всех исключений» я не получаю ожидаемого результата.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <script type="text/javascript">

            function doError() {
                foo.bar = 42;
            }

            window.onload = function() {
                try {
                    doError();
                } catch (e) {
                    console.log("Error", e);
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

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

avernet
источник
О каких еще ошибках вы думаете?
Мэтью Крамли
1
Любая ошибка, скажем: ссылка на неопределенную переменную (как в console.log(gaga)) или на неопределенное свойство (как в window.foo.bar).
Авернет
2
Те должны бросить исключения. Опция «Пауза в исключениях» работает для меня. Единственные ошибки, о которых я могу думать, не сработают, это синтаксические ошибки, но они возникают до того, как код будет выполнен.
Мэтью Крамли
1
Да, я пытаюсь это сейчас, и, кажется, сломать, где ошибка. Я сделал это несколько дней назад, и вместо того, чтобы ломать то место, где ошибка в коде, оно ломалось там, где перехватывалось исключение, вызванное ошибкой, в стеке. Пойди разберись!
Авернет

Ответы:

210

Изменить: исходная ссылка, на которую я ответил, теперь недействительна . Более новый URL будет https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions с 2016-11-11.

Я понимаю, что на этот вопрос есть ответ, но он больше не точен. Используйте ссылку выше ^


(ссылка заменена на отредактированную выше) - теперь вы можете установить ее на все исключения или только на необработанные. (Обратите внимание, что вы должны быть на вкладке Источники, чтобы увидеть кнопку.)

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

Обычно я не отвечал бы повторно на вопрос, но у меня был тот же самый вопрос, и я нашел этот теперь неправильный ответ, поэтому я решил поместить эту информацию сюда для людей, которые пришли позже в поиске. :)

Брайан Арнольд Синклер
источник
1
Брайан, спасибо, это действительно работает сейчас. Эта функция была доступна уже в феврале прошлого года, когда я ее опубликовал, но она не работала должным образом, хотя, похоже, сейчас работает нормально. Спасибо за ответ.
avernet
Кажется, кнопка, на которую ссылается ваша ссылка, больше не существует (по крайней мере, в текущем выпуске Chrome для разработчиков). Не уверен, как это сделать снова.
Андрей Федоров
2
Привет, Андрей, я смотрю на Chrome Canary и все еще вижу там кнопку. Это четвертая кнопка слева, как показано на d.pr/i/DHwT - нажмите один раз, и она перейдет в «Пауза для всех исключений», где второй щелчок переместит ее в «Пауза для необнаруженных исключений». Третий щелчок возвращает по умолчанию не приостанавливать.
Брайан Арнольд Синклер
Ссылка битая боюсь :(
Рик
1
Извиняюсь за то, что не видел комментарий раньше! Похоже, что developers.google.com/web/tools/chrome-devtools/javascript/… имеет суть содержания ранее. Я тоже исправлю исходный ответ, если смогу.
Брайан Арнольд Синклер
298

У меня возникли проблемы, чтобы получить его, поэтому я публикую фотографии, показывающие различные варианты:

Chrome 75.0.3770.142 [29 июля 2018 года]

Очень похожий пользовательский интерфейс, начиная с версии Chrome 38.0.2125.111 [11 декабря 2014]

На вкладке Sources:

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

Когда кнопка активирована, вы можете Pause On Caught Exceptionsс флажком ниже: введите описание изображения здесь


Предыдущие версии

Chrome 32.0.1700.102 [03 февраля 2014]

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

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

Chrome 27.0.1453.93 Стабильный

Варианты отладки

Maxence
источник
22
Я должен похвалить Facebook за ссылки на это непосредственно в их документах. +1
jimm101
1
Также, чтобы люди заметили, кнопки просто будут скрыты, если боковая панель не развернута, без указания того, что они там есть.
Эрик Мажерус
17

Теперь это поддерживается в Chrome с помощью кнопки «Приостановить все исключения».

Чтобы включить это:

  • Перейдите на вкладку «Источники» в Chrome Developer Tools
  • Нажмите кнопку «Пауза» в нижней части окна, чтобы переключиться в режим «Приостановить все исключения».

Обратите внимание, что эта кнопка имеет несколько состояний. Продолжайте нажимать кнопку, чтобы переключаться между

  • «Пауза во всех исключениях» - кнопка светло-синего цвета
  • «Пауза в необработанных исключениях», кнопка окрашена в фиолетовый цвет .
  • «Не останавливаться на исключениях» - кнопка окрашена в серый цвет
Брэд Паркс
источник
1

Почти любая ошибка приведет к исключениям. Единственные ошибки, о которых я могу подумать, что они не будут работать с опцией «пауза при исключениях», - это синтаксические ошибки, которые происходят до того, как какой-либо код выполняется, поэтому в любом случае нет места для паузы, и ни один код не будет работать.

Очевидно, что Chrome не будет останавливаться на исключении, если он находится внутри блока try-catch. Это только делает паузу на неисследованных исключениях. Я не знаю, как это изменить.

Если вам просто нужно знать, на какой строке произошло исключение (тогда вы можете установить точку останова, если исключение воспроизводимо), у Errorобъекта, переданного блоку catch, есть stackсвойство, показывающее, где произошло исключение.

Мэтью Крамли
источник
Мэтью, я «воспроизвел» нечто похожее на тот случай, который у меня был (см. Обновленный вопрос). Почему-то я не получаю отладчик, чтобы сломать эту ошибку. Есть ли у вас какие-либо идеи о том, почему это не будет работать с Chrome (это работает с Firebug при включении «разбить на все ошибки»).
2010 года
@ Мэтью, я создал другой ответ, говоря, что это невозможно, и пометил его как ответ. Если вы или кто-то еще найдете решение, я поменяю маркер.
2010 года
1

К сожалению, инструменты разработчика в Chrome, по-видимому, не могут «останавливаться на всех ошибках», как это делает Firebug.

avernet
источник
Просто нажмите кнопку «ОСТАНОВИТЬ ОДИН РАЗ» (она будет синего цвета) и не отмечайте опцию «Пауза при обнаружении исключений». Это все, это будет пауза только на ошибки.
Рой Шоа