Условная точка останова в зависимости от другой точки останова в Chrome Dev Tools

#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» для этого, она отображается в раскрывающемся списке при редактировании точки останова)

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