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

Я ищу эквивалент в 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.

Ответ 1

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

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


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

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

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

Ответ 2

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

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

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

На вкладке Sources:

enter image description here

Когда кнопка активирована, вы можете Pause On Caught Exceptions с флажком ниже: enter image description here


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

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

enter image description here

enter image description here enter image description here enter image description here

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

Debug options

Ответ 3

Теперь это поддерживается в Chrome кнопкой "Пауза для всех исключений".

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

  • Перейдите на вкладку "Источники" в инструментах разработчика Chrome.
  • Нажмите кнопку "Пауза" в нижней части окна, чтобы перейти к "Пауза во всех режимах исключений".

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

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

Ответ 4

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

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

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

Ответ 5

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