JavaScript: existe uma maneira de o Chrome quebrar todos os erros?

258

Estou procurando um equivalente no Chrome para a funcionalidade "quebrar todos os erros" do Firebug. Na guia Scripts, o Chrome tem uma "pausa em todas as exceções", mas isso não é o mesmo que interromper todos os erros.

Por exemplo, ao carregar uma página com o código a seguir, eu gostaria que o Chrome quebrasse a linha foo.bar = 42. Em vez disso, mesmo ao ativar a "Pausa em todas as exceções", não recebo o resultado esperado.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <script type="text/javascript">

            function doError() {
                foo.bar = 42;
            }

            window.onload = function() {
                try {
                    doError();
                } catch (e) {
                    console.log("Error", e);
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

Você pode tentar o código colado acima nesta página ou usando este jsFiddle .

avernet
fonte
Em que outros tipos de erros você está pensando?
Matthew Crumley
1
Qualquer erro, digamos: uma referência a uma variável indefinida (como em console.log(gaga) ) ou a uma propriedade indefinida (como em window.foo.bar).
avernet
2
Aqueles devem lançar exceções. A opção "pausa em exceções" funciona para mim. Os únicos erros em que consigo pensar que não funcionariam são erros de sintaxe, mas ocorrem antes do código ser executado.
Matthew Crumley
1
Sim, estou tentando isso agora, e parece quebrar onde está o erro. Eu fiz isso alguns dias atrás e, em vez de quebrar onde o erro está no código, estava quebrando onde uma exceção causada pelo erro estava sendo capturada, subindo a pilha. Vai saber!
avernet

Respostas:

210

Editar: o link original com o qual eu respondi agora é inválido . O URL mais novo seria https://developers.google.com/web/tools/chrome-devtools/javascript/add-breakpoints#exceptions em 11/11/2016.

Sei que esta pergunta tem uma resposta, mas não é mais precisa. Use o link acima ^


(link substituído pelo editado acima) - agora você pode configurá-lo para quebrar todas as exceções ou apenas as não tratadas. (Observe que você precisa estar na guia Fontes para ver o botão.)

O Chrome também adicionou agora outros recursos de ponto de interrupção realmente úteis, como a quebra de alterações no DOM ou eventos de rede.

Normalmente, eu não respondia novamente a uma pergunta, mas eu mesma tinha a mesma pergunta e encontrei a resposta agora incorreta, então achei que colocaria essa informação aqui para as pessoas que apareceram mais tarde na pesquisa. :)

Brian Arnold Sinclair
fonte
1
Brian, obrigado, de fato está funcionando agora. Esse recurso já estava disponível em fevereiro do ano passado, quando eu postei isso, mas não estava funcionando corretamente, enquanto parece estar funcionando bem agora. Obrigado pelo feedback.
avernet
O botão referido pelo seu link não parece mais estar presente (pelo menos na versão atual do Chrome do canal de desenvolvimento). Não sei como fazer isso novamente.
Andrey Fedorov
2
Olá Andrey, estou vendo o Chrome Canary e ainda vejo o botão lá. É o quarto botão da esquerda, como mostrado em d.pr/i/DHwT - clique uma vez e entra em Pausa em Todas as Exceções, onde um segundo clique o levará a Pausar em Exceções Não Capturadas. Um terceiro clique retorna ao padrão de não pausar.
Brian Arnold Sinclair
O link está quebrado, eu tenho medo :(
Rick
1
Desculpas por não ver o comentário mais cedo! Parece que developers.google.com/web/tools/chrome-devtools/javascript/… possui a essência do conteúdo de antes. Vou alterar a resposta original também, se puder.
Brian Arnold Sinclair
298

Eu tenho problemas para obtê-lo, então eu publico fotos mostrando diferentes opções:

Chrome 75.0.3770.142 [29 de julho de 2018]

Interface do usuário muito muito semelhante desde pelo menos o Chrome 38.0.2125.111 [11 de dezembro de 2014]

Na guia Sources:

insira a descrição da imagem aqui

Quando o botão está ativado, é possível Pause On Caught Exceptionscom a caixa de seleção abaixo: insira a descrição da imagem aqui


Versões prévias

Chrome 32.0.1700.102 [03 de fevereiro de 2014]

insira a descrição da imagem aqui

insira a descrição da imagem aqui insira a descrição da imagem aqui insira a descrição da imagem aqui

Chrome 27.0.1453.93 Estável

Opções de depuração

Maxence
fonte
22
Eu tenho que elogiar o Facebook por vincular isso diretamente em seus documentos. +1
jimm101
1
Também para as pessoas observar, os botões simplesmente ocultam se a barra lateral não for expandida, sem indicação de que eles estão lá.
Eric Majerus
17

Agora isso é suportado no Chrome pelo botão "Pausar em todas as exceções".

Para habilitá-lo:

  • Vá para a guia "Fontes" nas Ferramentas do desenvolvedor do Chrome
  • Clique no botão "Pausar" na parte inferior da janela para alternar para "Modo de pausa em todas as exceções".

Observe que este botão possui vários estados. Continue clicando no botão para alternar entre

  • "Pausar em todas as exceções" - o botão é azul claro
  • "Pausar em exceções não capturadas", o botão é roxo .
  • "Não pausar em exceções" - o botão é cinza
Brad Parks
fonte
1

Praticamente qualquer erro lançará uma exceção. Os únicos erros que consigo pensar que não funcionariam com a opção "pausa nas exceções" são erros de sintaxe, que acontecem antes que qualquer código seja executado, portanto, não há lugar para pausar de qualquer maneira e nenhum código será executado.

Aparentemente, o Chrome não fará uma pausa na exceção se estiver dentro de um bloco try-catch. Ele pausa apenas em exceções não capturadas. Não conheço nenhuma maneira de mudar isso.

Se você só precisa saber em que linha a exceção ocorreu (então você pode definir um ponto de interrupção se a exceção for reproduzível), o Errorobjeto fornecido ao bloco catch terá uma stackpropriedade que mostra onde a exceção ocorreu.

Matthew Crumley
fonte
Mateus, eu "reproduzi" algo semelhante ao que eu tinha (veja a pergunta atualizada). De alguma forma, não obtenho o depurador para interromper esse erro. Você tem alguma idéia de por que isso não funcionaria no Chrome (o mesmo ocorre com o Firebug ao ativar a "quebra de todos os erros").
avernet
@ Matthew, criei outra resposta dizendo que isso é impossível e a marquei como a resposta. Se você ou outra pessoa encontrar uma solução, alterarei o marcador.
23410 avernet
1

Infelizmente, as Ferramentas do desenvolvedor no Chrome parecem incapazes de "parar com todos os erros", como o Firebug.

avernet
fonte
Basta clicar no botão Pausar UMA VEZ (ele estará na cor Azul) e não marque a opção Pausar nas exceções detectadas. Isso tudo, fará uma pausa apenas em erros.
Roy Shoa