Firebug pour Firefox a une fonctionnalité intéressante, appelée "Break on property change", où je peux marquer n'importe quelle propriété de n'importe quel objet, et cela arrêtera l'exécution de JavaScript juste avant le changement.
J'essaie d'atteindre la même chose dans Google Chrome et je ne trouve pas la fonction dans le débogueur Chrome. Comment faire cela dans Google Chrome?
javascript
debugging
firefox
google-chrome
firebug
Arsen Zahray
la source
la source
Réponses:
Si cela ne vous dérange pas de jouer avec la source, vous pouvez redéfinir la propriété avec un accesseur.
la source
console.watch(obj, 'someProp')
.window.location
pour des raisons de sécurité.obj._someProp = obj.someProp;
, cela ne semble pas lié à ce que vous essayez d'archiver (probablement parce qu'il me manque quelque chose)Edit 2016.03:
Object.observe
est obsolète et supprimé dans Chrome 50Edit 2014.05: aObject.observe
été ajouté dans Chrome 36Chrome 36 est livré avec une
Object.observe
implémentation native qui peut être exploitée ici:Si vous ne le souhaitez que temporairement, vous devez stocker le rappel dans une variable et appeler une
Object.unobserve
fois terminé:Notez que lors de l'utilisation
Object.observe
, vous ne serez pas averti lorsque le devoir n'a rien changé, par exemple si vous avez écritmyObj.a = 1
.Pour voir la pile d'appels, vous devez activer l'option "Async call stack" dans Dev Tools:
Réponse originale (2012.07):
Un
console.watch
sketch comme suggéré par @katspaugh:Invocation:
Compatibilité:
debugger
(ou est-ce une question de configuration? veuillez me corriger alors), maisconsole.log
fonctionne.Éditer:
Notez que dans Firefox,
console.watch
existe déjà, en raison du non-standard de FirefoxObject.watch
. Par conséquent, dans Firefox, vous pouvez surveiller les changements de manière native:Cependant, cela sera bientôt (fin 2017) supprimé .
la source
oObj[sProp]
, car le getter entrerait dans une récursion infinie. Essayez-le dans Chrome, vous obtiendrezRangeError: Maximum call stack size exceeded
.async
case à cocher est si dorée avec cette approche: html5rocks.com/en/tutorials/developertools/async-call-stackasync
case à cocher comme @cnp a écrit, voir ma mise à jourObject.observe
est obsolète et sera bientôt supprimée: voir: chromestatus.com/features/6147094632988672Il existe une bibliothèque pour cela: BreakOn ()
Si vous l'ajoutez aux outils de développement Chrome sous forme d'extrait (sources -> extraits -> clic droit -> nouveau -> collez -le ) , vous pouvez l'utiliser à tout moment.
Pour l'utiliser, ouvrez les outils de développement et exécutez l'extrait. Ensuite, pour interrompre le
myObject.myProperty
changement, appelez ceci depuis la console de développement:Vous pouvez également ajouter la bibliothèque à la compilation de débogage de votre projet afin de ne pas avoir à appeler à
breakOn
nouveau chaque fois que vous actualisez la page.la source
Cela peut également être fait en utilisant le nouveau proxy objet dont le but est exactement cela: intercepter les lectures et les écritures sur l'objet qui est encapsulé par le Proxy. Vous enveloppez simplement l'objet que vous souhaitez observer dans un proxy et utilisez le nouvel objet enveloppé au lieu de votre original.
Exemple:
Maintenant, utilisez wrappedObject où vous fourniriez originalObject à la place et examinez la pile d'appels lors d'une pause.
la source
set
doivent revenirtrue
pour ne pas échouer pour les cas autres que suivis.la source
J'ai décidé d'écrire ma propre version de cette solution, de l'enregistrer dans un extrait de code dans les DevTools de Chrome et de l'envelopper dans un IIFE qui devrait prendre en charge à la fois Node et Browsers. Également changé l'observateur pour utiliser une variable de portée plutôt qu'une propriété sur l'objet, de sorte qu'il n'y a aucune possibilité de conflits de noms, et tout code qui énumère les clés ne "verra" pas la nouvelle "clé privée" créée:
la source
Chrome intègre cette fonctionnalité dans les dernières versions https://developers.google.com/web/updates/2015/05/view-and-change-your-dom-breakpoints .
Donc plus besoin de bibliothèques et de solutions personnalisées, il suffit de cliquer avec le bouton droit sur l'élément DOM dans l'inspecteur et de choisir 'Break on' -> 'Attributs modifications' et c'est tout.
la source