JavaScript: как установить условную точку останова в инструментах отладчика Chrome


100

У меня есть этот простой файл js, который непрерывно печатает дату.

Я использую инструменты отладчика Google Chrome (F12)

У меня вопрос: можно ли установить условную точку останова в Google Chrome?

В моем коде я хочу установить точку останова, если значение секунд равно 50 ??

s = date.getSeconds();

Это jsfiddle, где мой источник

(Не уверен, почему он не работает в jsfiddle)

В любом случае, мой вопрос: можно ли установить условную точку останова в инструментах Chrome Debugger?


1
+1 потому что я не знал, что это возможно, пока не пошел проверить документацию, чтобы ответить на этот вопрос. Спасибо!
Theraot

Ответы:


141

Да, это возможно.

Щелкните правой кнопкой мыши маркер точки останова и выберите «Редактировать точку останова ...», где вы можете установить условие.

Из Chrome Developer Tools на Breakpoints на сайте developers.google.com (выделено мной):

Примечание. Все установленные вами точки останова отображаются в разделе «Точки останова» на правой боковой панели. Щелчок по записи позволяет перейти к выделенной строке исходного файла. После установки точки останова щелкните правой кнопкой мыши индикатор точки останова синего тега, чтобы установить условный оператор для этой точки останова . Введите выражение, и точка останова будет приостановлена, только если условие истинно.


Спасибо, я сделал, как вы упомянули, отредактировал точку останова и установил if (s == 50), но почему он не останавливается в этом состоянии ??
Pawan

2
@PreethiJain напишите просто условие «s == 50» (без кавычек). Кстати, мне удалось заставить работать jsfiddle по адресу: jsfiddle.net/nVpXN/6
Theraot

6
Для начала вам даже не нужно добавлять точку останова. Просто щелкните правой кнопкой мыши строку и выберите «Добавить условную точку останова ...» .
Мартин Эндер

2
Чувак, сейчас 2017 год, и я узнаю что-то новое о Chrome. #Awesomeness
The Qodesmith

1
Это просто проверит оператор на этом этапе выполнения кода, а затем прервет, если это так, так же, как точка останова в операторе if. Я думаю, что OP хотел знать, проверяет ли отладчик при выполнении каждого оператора, выполняется ли условие, и если отладчик ломается в этой строке. Такое поведение намного полезнее, поскольку вам не нужно играть в детектив, чтобы узнать, когда переменная делает что-то неожиданное.
ejectamenta

27

Взгляните на debuggerзаявление. В основном он вызывает любые доступные инструменты отладчика, а в Chrome он действует так, как если бы интерпретатор встретил точку останова.

Ваш код будет:

s = date.getSeconds();
if (s == 50) {
   debugger;
}

Из справки :

[debugger] Вызывает все доступные функции отладки. Если функции отладки недоступны, этот оператор не действует.


Хотя на самом деле это больше в духе оригинального способа, которым был задан исходный вопрос, и это отличная информация; Я думаю, что реальный вопрос касался инструментов Chrome, а не ECMAscript. Что, как говорится; следует добавить предостережение: удалите все debuggerвызовы в производственном коде. (Я почти уверен, что линтинг выдаст ошибку, если есть отладчик, но его стоит вызывать всякий раз, когда поднимается тема).
Криспен Смит

1
вам не нужен оператор отладчика, вы также можете иметь пустой оператор внутри if и просто добавить туда точку останова.
ejectamenta

8

Вы можете установить условную точку останова в Google Chrome, выполнив следующие действия:

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

2. нажмите «Добавить условную точку останова», появится один текст, в котором можно добавить условие (результат будет «истина», если условие выполнено, иначе «ложь»), цвет точки останова станет оранжевым после добавления условия, чк на введите описание изображения здесь

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.