Como definir um ponto de interrupção JavaScript no código no Chrome?

686

Quero forçar o depurador do Chrome a interromper uma linha via código ou usar algum tipo de tag de comentário, como algo parecido console.break().

Paulo
fonte
46
você já tentou debugger;ou apenas usa pontos de interrupção regulares na barra de ferramentas do desenvolvedor?
Diaho 06/04
você quer dizer definir pontos de interrupção no próprio código, em vez de defini-los usando o inspetor de scripts nas ferramentas do desenvolvedor?
Faris M
2
Ou talvez melhor: defina um ponto de interrupção no XHR no Chrome .
Felix Kling #
9
Não é uma duplicata. "no Chrome" vs "no código" são duas coisas diferentes, e esta pergunta é aplicável a muitos cenários que não são XHR. Sim 1 das respostas da outra pergunta responde a essa pergunta, mas outras não são aplicáveis. Eu literalmente pesquisei "definir ponto de interrupção de javascript a partir do código chrome" e este é o primeiro resultado, e a outra pergunta nem está na primeira página.
AaronLS

Respostas:

1158

Você pode usar debugger;dentro do seu código. Se o console do desenvolvedor estiver aberto, a execução será interrompida. Também funciona no firebug.

xn.
fonte
8
Um bom truque é disparar o depurador após alguns segundos:setTimeout(function(){debugger;}, 3000);
Shahar
30
O truque do temporizador é uma prática comum? Verificação / justificação?
Justus Eapen
4
Isso é muito útil. Nota também debugger;é suportada em todos os principais navegadores. Para obter mais informações: w3schools.com/jsref/jsref_debugger.asp
ScottyG:
16
O @ScottyG MDN é menos brilhante, mais útil: developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/…
jpaugh
@JustusEapen O problema é que o Javascript é de thread único, portanto não pode interromper o código em execução.
Vitruvius
27

Configure um botão, clique em listener e chame o debugger;

Exemplo

$("#myBtn").click(function() {
 debugger;   
});

Demo

http://jsfiddle.net/hBCH5/

Recursos sobre depuração em JavaScript

mártires
fonte
1
Que define um ponto de interrupção no manipulador de clique, provavelmente não o OP queria
ᆼ ᆺ ᆼ
@PeterV eu consideraria útil se eu estivesse apenas tentando abrir meu código para um local próximo a um bloco de código que eu estava depurando ... mas não queria depurar o tempo todo ... mas sim , se for apenas para abrir o depurador ... então há um pressionamento de tecla para isso.
Armstrongest
27

Você também pode usar debug(function), para interromper quando functioné chamado.

Referência da API da linha de comandos: debug

Protetor um
fonte
2
Muito bom - parece ser o Chrome apenas no momento, mas essa é minha plataforma principal. Agora eu só precisa se lembrar de parar de chamar minha bandeira depuração global "debug" ...
brichins
A Referência da API da Linha de Comandos do Depurador do Chrome, na verdade, contém algumas outras coisas bastante úteis que eu não sabia. Obrigado!
Peter T.
16

Como outros já disseram, debugger;é o caminho a percorrer. Eu escrevi um pequeno script que você pode usar na linha de comando em um navegador para definir e remover o ponto de interrupção antes da chamada da função: http://andrijac.github.io/blog/2014/01/31/javascript-breakpoint/

Andrija
fonte
8

Na guia "Scripts", vá para onde está o seu código. À esquerda do número da linha, clique em. Isso definirá um ponto de interrupção.

Captura de tela:

captura de tela do ponto de interrupção no chrome

Você poderá acompanhar seus pontos de interrupção na guia direita (como mostrado na captura de tela).

Florian Margaine
fonte
41
Isso não responde à pergunta, ele quer ser capaz de fazê-lo em código
robertc 4/12/12
39
xn .: "Aqui está uma foto da minha resposta, quando era apenas um bebezinho com 0 votos. Está tudo crescido agora."
AaronLS
3
Se você carregar um script JS com uma chamada Ajax, ele não será exibido aqui, daí a necessidade de um ponto de interrupção no código.
Petruza
@FlorianMargaine, Não há mais guia Scripts. Atualize a imagem.
Pacerier 23/06
Em algumas estruturas, como o Drupal, o JS recebe um sufixo de string de consulta que impede o cache. Se você limpa os caches, ele geralmente atualiza esse sufixo, o que pode eliminar todos os pontos de interrupção que você definiu na carga anterior.
Nick
7

debugger é uma palavra-chave reservada do EcmaScript e recebe semântica opcional desde o ES5

Como resultado, ele pode ser não utilizado apenas no Chrome, mas também Firefox e Node.js vianode debug myscript.js .

O padrão diz :

Sintaxe

DebuggerStatement :
    debugger ;

Semântica

A avaliação da produção DebuggerStatement pode permitir que uma implementação cause um ponto de interrupção quando executada em um depurador. Se um depurador não estiver presente ou ativo, esta instrução não terá efeito observável.

A produção DebuggerStatement: depurador; é avaliado da seguinte forma:

  1. Se um recurso de depuração definido pela implementação estiver disponível e ativado,
    1. Execute uma ação de depuração definida pela implementação.
    2. Permita que o resultado seja um valor de Conclusão definido pela implementação.
  2. Outro
    1. Seja o resultado (normal, vazio, vazio).
  3. Retornar resultado.

Nenhuma alteração no ES6.

Ciro Santilli adicionou uma nova foto
fonte
3

É possível e há muitas razões pelas quais você pode querer fazer isso. Por exemplo, depurando um loop infinito de javascript próximo ao início do carregamento da página, que impede o carregamento correto do conjunto de ferramentas do desenvolvedor chrome (ou firebug).

Veja a seção 2 de

http://www.laurencegellert.com/2012/05/the-three-ways-of-setting-breakpoints-in-javascript/

ou apenas adicione uma linha contendo a palavra depurador ao seu código no ponto de teste necessário.

user2539341
fonte
3

Ponto de interrupção: -

O ponto de interrupção interromperá a execução e permitirá que você examine os valores JavaScript.

Após examinar os valores, você pode retomar a execução do código (normalmente com um botão de reprodução).

Depurador: -

O depurador; interrompe a execução do JavaScript e chama a função de depuração.

A instrução depurador suspende a execução, mas não fecha nenhum arquivo ou limpa nenhuma variável.

Example:-
function checkBuggyStuff() {
  debugger; // do buggy stuff to examine.
};
Parth Raval
fonte
2

Existem várias maneiras de depurar o código JavaScript. As duas abordagens a seguir são amplamente usadas para depurar JavaScript via código

  1. Usando console.log()para imprimir os valores no console do navegador. (Isso ajudará você a entender os valores em determinados pontos do seu código)

  2. Palavra-chave do depurador. Adicione debugger;aos locais que você deseja depurar e abra o console do desenvolvedor do navegador e navegue até a guia Fontes.

Para obter mais ferramentas e maneiras pelas quais você depura o Código JavaScript, são fornecidas neste link pelo W3School .

Keet Sugathadasa
fonte
1
+1 e usar console.log também são úteis para localizar seu código, porque geralmente o arquivo / linha # é mostrado ao lado da mensagem e você pode clicar nele para abrir seu código no depurador, definir ponto de interrupção etc.
John Henckel
0

Eu não recomendaria debugger;se você apenas deseja matar e interromper o código javascript, pois debugger;irá congelar temporariamente o código javascript e não para permanentemente.

Se você deseja matar e interromper adequadamente o código javascript ao seu comando, use o seguinte:

throw new Error("This error message appears because I placed it");

S para
fonte