O Firebug for Firefox possui um recurso interessante, chamado "Interromper na alteração de propriedade", onde eu posso marcar qualquer propriedade de qualquer objeto e interromperá a execução do JavaScript antes da alteração.
Estou tentando obter o mesmo no Google Chrome e não consigo encontrar a função no depurador do Chrome. Como faço isso no Google Chrome?
javascript
debugging
firefox
google-chrome
firebug
Arsen Zahray
fonte
fonte
Respostas:
Se você não se importa de mexer com a fonte, pode redefinir a propriedade com um acessador.
fonte
console.watch(obj, 'someProp')
.window.location
por razões de segurança.obj._someProp = obj.someProp;
, parece não relacionado sobre o que você está tentando archieve (provavelmente porque eu estou perdendo somethign)Editar 2016.03:
Object.observe
foi descontinuado e removido no Chrome 50Editar 2014.05:Object.observe
foi adicionado no Chrome 36O Chrome 36 é enviado com
Object.observe
implementação nativa que pode ser aproveitada aqui:Se você desejar apenas temporariamente, armazene o retorno de chamada em uma variável e ligue
Object.unobserve
quando terminar:Observe que, ao usar
Object.observe
, você não será notificado quando a tarefa não mudar nada, por exemplo, se você tiver escritomyObj.a = 1
.Para ver a pilha de chamadas, você precisa habilitar a opção "pilha de chamadas assíncronas" nas Ferramentas de Desenvolvimento:
Resposta original (2012.07):
Um
console.watch
esboço sugerido por @katspaugh:Invocação:
Compatibilidade:
debugger
(ou é uma questão de configuração? por favor me corrija), masconsole.log
funciona.Editar:
Observe que no Firefox
console.watch
já existe, devido ao não padrão do FirefoxObject.watch
. Portanto, no Firefox, você pode observar as alterações de forma nativa:No entanto, isso será removido em breve (final de 2017) .
fonte
oObj[sProp]
, porque o getter entraria em uma recursão infinita. Experimente no Chrome, você receberáRangeError: Maximum call stack size exceeded
.async
caixa de seleção é tão dourada com esta abordagem: html5rocks.com/en/tutorials/developertools/async-call-stackasync
caixa de seleção como @cnp escreveu, ver meu updateObject.observe
é obsoleto e em breve será removido: ver: chromestatus.com/features/6147094632988672Existe uma biblioteca para isso: BreakOn ()
Se você adicioná-lo às ferramentas de desenvolvimento do Chrome como um snippet (fontes -> snippets -> clique com o botão direito do mouse -> novo -> cole este ) , poderá usá-lo a qualquer momento.
Para usá-lo, abra o dev-tools e execute o snippet. Para interromper quando
myObject.myProperty
for alterado, chame isso no console do desenvolvedor:Você também pode adicionar a biblioteca à compilação de depuração do seu projeto para não precisar ligar
breakOn
novamente sempre que atualizar a página.fonte
Isso também pode ser feito usando o novo objeto Proxy, cujo objetivo é exatamente o seguinte: interceptar as leituras e gravações no objeto envolvido pelo Proxy. Você simplesmente quebra o objeto que gostaria de observar em um Proxy e usa o novo objeto quebrado em vez do original.
Exemplo:
Agora use wrapObject onde você forneceria originalObject e examine a pilha de chamadas no intervalo.
fonte
set
devem retornartrue
para que não falhem em outros casos que não sejam rastreados.fonte
Decidi escrever minha própria versão desta solução, salve-a em um trecho no DevTools do Chrome e envolva-a em um IIFE que deve oferecer suporte a nós e navegadores. Também mudou o observador para usar uma variável de escopo em vez de uma propriedade no objeto, de modo que não haja possibilidade de conflitos de nomes, e qualquer código que enumere chaves não "verá" a nova "chave privada" criada:
fonte
O Chrome tem esse recurso incorporado nas versões mais recentes https://developers.google.com/web/updates/2015/05/05/view-and-change-your-dom-breakpoints .
Portanto, não há mais necessidade de bibliotecas e soluções personalizadas, basta clicar com o botão direito do mouse no elemento DOM no inspetor e escolher 'Interromper' -> 'modificações de atributos' e pronto.
fonte