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 .


Які ще помилки ви думаєте?
Меттью Крамлі

1
Будь-яка помилка, скажімо: посилання на невизначену змінну (як у console.log(gaga)) або на невизначене властивість (як у window.foo.bar).
авернет

2
Вони повинні кинути винятки. Для мене працює варіант "пауза на винятки". Єдині помилки, які я можу вважати, що це не спрацювало б - це синтаксичні помилки, але вони трапляються до того, як код буде виконаний.
Меттью Крамлі

1
Так, я зараз це намагаюся, і, здається, зламається там, де помилка. Я робив це кілька днів тому, і замість того, щоб порушувати там, де помилка в коді, вона ламалася там, де виняток, викликаний помилкою, був схоплений, в сторону стека. Піди розберися!
авернет

Відповіді:


210

Редагувати: початкове посилання, на яке я відповів, тепер недійсне . Новішою URL-адресою буде https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions станом на 11.11.2016.

Я усвідомлюю, що на це питання є відповідь, але це вже не точно. Скористайтеся посиланням вище ^


(посилання замінено відредагованим вище) - тепер ви можете встановити його для розбиття на всі винятки або лише на необроблені. (Зверніть увагу, що вам потрібно перейти на вкладку " Джерела" , щоб побачити кнопку.)

Chrome також додав деякі інші дійсно корисні можливості точки перерви, такі як порушення DOM або мережеві події.

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


1
Брайан, дякую, це справді працює зараз. Ця функція була доступна вже в лютому минулого року, коли я розмістив її, але вона не працювала належним чином, хоча зараз, здається, працює нормально. Дякуємо за відгук.
авернет

Кнопка, на яку посилається ваше посилання, здається, вже не існує (принаймні, у поточному релізі 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]

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

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

Хром 27.0.1453.93 Стабільний

Параметри налагодження


22
Я маю похвалити Facebook за посилання на це безпосередньо у своїх документах. +1
jimm101

1
Крім того, щоб люди відзначили, кнопки будуть просто приховані, якщо бічна панель не буде розширена, без вказівки, що вони там є.
Ерік Маєрус

17

Зараз це підтримується в Chrome кнопкою "Призупинити всі винятки".

Щоб увімкнути це:

  • Перейдіть на вкладку "Джерела" в Інструментах для розробників Chrome
  • Натисніть кнопку "Призупинити" внизу вікна, щоб перейти на "Призупинити в режимі всіх винятків".

Зауважте, що ця кнопка має кілька станів. Продовжуйте натискати кнопку для переключення між

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

1

Практично будь-яка помилка викине винятки. Єдині помилки, на які я можу подумати, які б не спрацювали з опцією "пауза на винятки", - це синтаксичні помилки, які трапляються до того, як будь-який з кодів буде виконаний, тому все-таки немає місця робити паузу і жоден код не запускається.

Мабуть, Chrome не призупиняє виняток, якщо він знаходиться всередині блоку спробу вловлювання. Він призупиняється лише на невиконаних винятках. Я не знаю жодного способу це змінити.

Якщо вам просто потрібно знати, на якому рядку сталася виняток (тоді ви можете встановити точку розриву, якщо виняток відтворюється), Errorоб'єкт, що надається блоку лову, має stackвластивість, яка показує, де виняток стався.


Метью, я "відтворив" щось подібне до випадку, який я мав (див. Оновлене запитання). Якось, я не змушую відладчика зламати цю помилку. Чи маєте ви уявлення про те, чому це не працює з Chrome (це робиться з Firebug, коли ввімкнено "зламати всі помилки").
авернет

@Mathhew, я створив ще одну відповідь, сказавши, що це неможливо, і позначив її як відповідь. Якщо ви чи хтось інший знайде рішення, я поміняю маркер.
авернет

1

На жаль, здається, що Інструменти для розробників у Chrome не можуть "зупинитися на всіх помилках", як це робить Firebug.


Просто натисніть на кнопку "Призупинити" ОДИН ЧАС (вона буде в синьому кольорі) і не позначайте опцію "Пауза на виняткові випадки". Що все, Пауза буде лише на помилках.
Roy Shoa
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.