#debugging #google-chrome-devtools #conditional-breakpoint
#отладка #google-chrome-devtools #условная точка останова
Вопрос:
Мне нужно остановиться на точке останова, только если код был остановлен первым в другой точке останова.
Пример:
for(let i=0; i<5; i ){
someFunction(); // put conditional breakpoint here with i==3
}
function someFunction(){
// put another breakpoint here, but this should be executed only for i==3
// we don't have i here for the condition, so it should be executed only if prev breakpoint was executed
}
Возможно ли это с помощью Chrome Dev Tools?
Комментарии:
1. Попробуйте установить глобальную переменную, как
window.foo=i==3
внутри первого bp, и проверить ее во втором.2. @wOxxOm да, я знаю, что могу сделать это с помощью кода, но я спрашивал, есть ли в Chrome Dev Tools функция для упрощения этого. Предположим, у нас есть каскад точек останова, зависящих друг от друга, и некоторые из них имеют настраиваемое условие и т.д.
3. Ах, нет. Этот обходной путь является единственным решением.
Ответ №1:
На самом деле вы можете писать произвольный код при создании условной точки останова. Вы можете написать целый блок кода (используйте shift-enter для написания многострочного кода), если хотите, используя любой JS, который вы хотите. Любые const/let/var
объявления будут доступны только в рамках этого блока кода. Используйте глобальные переменные для передачи данных в другие условные точки останова или любой код, который вы хотите вручную запустить в консоли DevTools. Если вы не хотите останавливаться на этой точке останова, просто используйте false
в качестве последнего выражения вашего кода.
В вашем случае установите условную точку останова для someFunction()
строки: _i = i, false
или _i = i; false;
( _i
такая же, как window._i
в этом случае), просто убедитесь, что используете достаточно уникальное имя, чтобы избежать конфликтов с каким-либо другим вашим кодом или какой-либо сторонней библиотекой, которую вы используете.
Внутри функции установите условную точку останова с _i == 3
условием.
Как я выяснил, вы можете выполнять всевозможные аккуратные трюки с условными точками останова:
- Сохраните ссылку на некоторый экземпляр класса в глобальной переменной, затем обратитесь к нему в консоли, чтобы проверить его свойства или вызвать его методы
- Измените любую переменную в области видимости
- Добавьте ведение журнала (в DevTools также есть точка останова типа «logpoint» для этого, она отображается в раскрывающемся списке при редактировании точки останова)
Еще одно замечание: если у вас есть какие-либо синтаксические ошибки в коде, который вы используете в условной точке останова, весь блок кода не будет выполнен, и точка останова не будет запущена. Поэтому, если ваш код условной точки останова, похоже, не работает, проверьте его на наличие ошибок — например, установите там обычную точку останова, запустите ее, а затем выполните код, который вы пытались использовать в условной точке останова в консоли, чтобы узнать, в чем проблема.