Firebug для Firefox имеет замечательную функцию, называемую «Break on change property», где я могу пометить любое свойство любого объекта, и он остановит выполнение JavaScript прямо перед изменением.
Я пытаюсь добиться того же в Google Chrome, и я не могу найти функцию в отладчике Chrome. Как мне это сделать в Google Chrome?
javascript
debugging
firefox
google-chrome
firebug
Арсен Захрай
источник
источник
Ответы:
Если вы не возражаете возиться с источником, вы можете переопределить свойство с помощью метода доступа.
источник
console.watch(obj, 'someProp')
.window.location
по соображениям безопасности.obj._someProp = obj.someProp;
, кажется, это не имеет отношения к тому, что ты пытаешься архивировать (вероятно, потому, что мне не хватает чего-то)Изменить 2016.03:
Object.observe
устарело и удалено в Chrome 50Редактировать 2014.05:Object.observe
добавлено в Chrome 36Chrome 36 поставляется с собственной
Object.observe
реализацией, которую можно использовать здесь:Если вы хотите это только временно, вы должны хранить обратный вызов в переменной и вызывать,
Object.unobserve
когда закончите:Обратите внимание, что при использовании
Object.observe
вы не будете уведомлены, когда назначение ничего не изменило, например, если вы написалиmyObj.a = 1
.Чтобы увидеть стек вызовов, вам нужно включить опцию «асинхронный стек вызовов» в Dev Tools:
Оригинальный ответ (2012.07):
console.watch
Эскиз как предложено @katspaugh:Призвание:
Совместимость:
debugger
(или это вопрос конфигурации? пожалуйста, исправьте меня тогда), ноconsole.log
работают.Редактировать:
Обратите внимание, что в Firefox он
console.watch
уже существует из-за нестандартности FirefoxObject.watch
. Следовательно, в Firefox вы можете наблюдать за изменениями:Однако, это будет скоро (конец 2017) удалено .
источник
oObj[sProp]
, потому что получатель вошел бы в бесконечную рекурсию. Попробуйте в Chrome, вы получитеRangeError: Maximum call stack size exceeded
.async
флажок такой золотой с таким подходом: html5rocks.com/en/tutorials/developertools/async-call-stackasync
флажком, как написал @cnp, см. Мое обновлениеObject.observe
устарела и скоро будет удалена: см. Chromestatus.com/features/6147094632988672Для этого есть библиотека: BreakOn ()
Если вы добавите его в инструменты Chrome dev как фрагмент (исходники -> фрагменты -> щелчок правой кнопкой мыши -> новый -> вставить это ) , вы можете использовать его в любое время.
Чтобы использовать его, откройте dev-tools и запустите сниппет. Чтобы прервать
myObject.myProperty
изменение, вызовите его из консоли dev:Вы также можете добавить библиотеку в отладочную сборку вашего проекта, чтобы вам не нужно было
breakOn
повторно вызывать каждый раз, когда вы обновляете страницу.источник
Это также можно сделать с помощью нового объекта Proxy , цель которого именно в этом: перехватывать чтение и запись в объект, который упакован прокси. Вы просто оборачиваете объект, который вы хотели бы наблюдать, в прокси-сервер и используете новый обернутый объект вместо исходного.
Пример:
Теперь используйте wrappedObject, где вы бы вместо этого указали originalObject и проверяли стек вызовов на разрыв.
источник
set
должны вернуться,true
чтобы не потерпеть неудачу, за исключением отслеживаемых случаев.источник
Решил написать свою собственную версию этого решения, сохранить ее во фрагменте кода в Chrome DevTools и обернуть его в IIFE, который должен поддерживать как Node, так и Browser. Также изменил наблюдатель, чтобы использовать переменную области видимости, а не свойство объекта, чтобы исключить возможность конфликта имен, и любой код, который перечисляет ключи, не будет «видеть» новый «закрытый ключ», который создается:
источник
Chrome имеет эту функцию, встроенную в последние версии https://developers.google.com/web/updates/2015/05/view-and-change-your-dom-breakpoints .
Поэтому больше нет необходимости в пользовательских библиотеках и решениях, просто щелкните правой кнопкой мыши на элементе DOM в инспекторе и выберите «Разбить» -> «Изменение атрибутов» и все.
источник