Como posso depurar meu código JavaScript? [fechadas]

113

Quando eu descobrir que tenho um trecho de código problemático, como devo proceder para depurá-lo?

Canavar
fonte

Respostas:

78

O Firebug é uma das ferramentas mais populares para esse fim.

Ryan Oberoi
fonte
8
Vincule-o: getfirebug.com
Annika Backstrom
7
Eu gosto de firebug, mas não diria que é a cabeça e os ombros acima do inspetor do webkit.
Ryan Florence
2
O Firebug estava à frente de seu tempo quando foi lançado, mas não acho que seja a melhor ferramenta, considerando outras ferramentas que surgiram recentemente.
James
Estou usando o Firebug desde que o descobri, e isso me ajuda muito! console.debug, profiler, inspector ...
Julio Greff
@NinaScholz Agora, todos os navegadores vêm com jetpacks por padrão!
oneCoderToRuleThemAll
74

Todos os navegadores modernos vêm com alguma forma de aplicativo de depuração de JavaScript integrado. Os detalhes destes serão cobertos nas páginas da web de tecnologias relevantes. Minha preferência pessoal para depurar JavaScript é Firebug no Firefox. Não estou dizendo que o Firebug é melhor do que qualquer outro; depende da sua preferência pessoal e você provavelmente deve testar seu site em todos os navegadores de qualquer maneira (minha primeira escolha pessoal é sempre Firebug).

Abordarei algumas das soluções de alto nível abaixo, usando o Firebug como exemplo :

Raposa de fogo

O Firefox vem com sua própria ferramenta de depuração de JavaScript embutida, mas eu recomendo que você instale o complemento Firebug . Isso fornece vários recursos adicionais com base na versão básica que são úteis. Vou falar apenas sobre Firebug aqui.

Assim que o Firebug estiver instalado, você pode acessá-lo como abaixo:

Em primeiro lugar, se você clicar com o botão direito em qualquer elemento, poderá Inspecionar elemento com Firebug :

Inspecionar elemento no Firebug

Clicar aqui abrirá o painel Firebug na parte inferior do navegador:

Painel Firebug

O Firebug oferece vários recursos, mas aquele em que estamos interessados ​​é a guia de script. Clicar na guia de script abre esta janela:

Guia de script

Obviamente, para depurar, você precisa clicar em recarregar :

JavaScript na guia sctipt

Agora você pode adicionar pontos de interrupção clicando na linha à esquerda do trecho de código JavaScript ao qual deseja adicionar o ponto de interrupção:

Adicionando pontos de interrupção

Quando o seu ponto de interrupção for atingido, terá a seguinte aparência:

Um ponto de interrupção sendo atingido

Você também pode adicionar variáveis ​​de observação e geralmente fazer tudo o que você esperaria em uma ferramenta de depuração moderna.

Assistir variáveis

Para obter mais informações sobre as várias opções oferecidas no Firebug, verifique o FAQ do Firebug .

cromada

Chrome também tem seu próprio embutido opção depuração de JavaScript, que funciona de forma muito semelhante, clique direito, inspecionar elemento, etc . Dê uma olhada nas Ferramentas do desenvolvedor do Chrome . Eu geralmente acho os rastreamentos de pilha no Chrome melhores do que no Firebug.

Internet Explorer

Se você está desenvolvendo em .NET e usando Visual Studio usando o ambiente de desenvolvimento web, você pode depurar código JavaScript diretamente colocando pontos de interrupção, etc. Seu código JavaScript parece exatamente o mesmo como se você estivesse depurando seu código C # ou VB.NET .

Se você não tiver isso, o Internet Explorer também fornece todas as ferramentas mostradas acima. Irritantemente, em vez de ter o botão direito do mouse inspecionar recursos de elemento do Chrome ou Firefox, você acessa as ferramentas do desenvolvedor pressionando F12 . Esta questão cobre a maioria dos pontos.

Liam
fonte
... Você deve ter tido isso em um buffer de copiar e colar pronto para usar, certo? :)
Christian Ternus
3
Desculpe, eu perdi totalmente que estava sendo perguntado e respondido pela mesma pessoa! Achei que você tivesse algum tipo de cópia de depuração de Javascript que colocava toda vez que alguém fazia essa pergunta.
Christian Ternus
54
  • Internet Explorer 8 (Ferramentas de desenvolvedor - F12). Qualquer outra coisa é de segunda categoria na terra do Internet Explorer
  • Firefox e Firebug . Clique F12para exibir.
  • Safari (Mostrar barra de menu, Preferências -> Avançado -> Mostrar barra de menu Desenvolver )
  • Console JavaScript do Google Chrome ( F12ou ( Ctrl+ Shift+ J)). Quase sempre o mesmo navegador do Safari, mas o Safari é melhor IMHO.
  • Opera ( Ferramentas -> Avançado -> Ferramentas do desenvolvedor )
Chris Brandsma
fonte
+1 opera js debugger dá uma mensagem de erro melhor do que todo o resto
Gabriel Solomon
3
Embora em 2009 o Safari possa ter superado as ferramentas de desenvolvedor do Chromes em 2014, eu levaria a depuração no Chrome em vez do Safari em qualquer dia da semana. As ferramentas de desenvolvedor do Chrome e o Firebug do Firefox são de primeira linha ... e embora difíceis de usar, as ferramentas de desenvolvimento do IE11 estão provavelmente em terceiro lugar ( IMHO )
scunliffe
29

Existe uma palavra-chave depurador em JavaScript para depurar o código JavaScript. Coloque o depurador; snippet em seu código JavaScript. Ele começará automaticamente a depurar o código JavaScript nesse ponto.

Por exemplo:

Suponha que este seja o seu arquivo test.js

function func(){
    //Some stuff
    debugger;  //Debugging is automatically started from here
    //Some stuff
}
func();
  • Quando o navegador executa a página da web na opção do desenvolvedor com o depurador habilitado, ele automaticamente inicia a depuração a partir do depurador; ponto.
  • Deve ser aberta a janela do desenvolvedor do navegador.
Suresh Mahawar
fonte
No Safari às vezes funciona e às vezes não. Tenho certeza de que é alguma coisa do meu lado. FWIW Eu habilitei Automaticamente Mostrar Inspetor da Web para JSContexts.
1,21 gigawatts
21

Eu uso a velha printfabordagem boa (uma técnica antiga que funcionará bem a qualquer momento).

Olhe para a magia %o:

console.log("this is %o, event is %o, host is %s", this, e, location.host);

%odespejar conteúdo clicável e pesquisável em profundidade, bem impresso do objeto JS. %sfoi mostrado apenas para registro.

E isto:

console.log("%s", new Error().stack);

fornece rastreio de pilha semelhante ao Java até o ponto de new Error()invocação (incluindo o caminho para o arquivo e o número da linha !!).

Ambos %oe new Error().stackdisponíveis no Chrome e Firefox.

Com essas ferramentas poderosas, você faz suposições sobre o que está errado em seu JS, coloca a saída de depuração (não se esqueça de embrulhar na ifinstrução para reduzir a quantidade de dados) e verifique sua suposição. Corrija o problema ou faça uma nova suposição ou coloque mais saída de depuração no problema de bit.

Também para rastreamentos de pilha, use:

console.trace();

como dizer console

Feliz hacking!

Gavenkoa
fonte
2
+1 para console.trace (); Resposta diferente das demais.
Saurabh Patil
12

Comece com Firebug e IE Debugger.

Porém, tenha cuidado com depuradores em JavaScript. De vez em quando, eles afetam o ambiente apenas o suficiente para causar alguns dos erros que você está tentando depurar.

Exemplos:

Para o Internet Explorer, é geralmente uma desaceleração gradual e algum tipo de vazamento de memória. Depois de cerca de meia hora, preciso reiniciar. Parece ser bastante regular.

Para o Firebug, provavelmente já passou mais de um ano, então pode ter sido uma versão mais antiga. Como resultado, não me lembro dos detalhes, mas basicamente o código não estava funcionando corretamente e depois de tentar depurá-lo por um tempo desativei o Firebug e o código funcionou bem.

Tom Hubbard
fonte
9

Embora alert(msg);funcione naqueles cenários "Eu só quero descobrir o que está acontecendo" ... todo desenvolvedor encontrou aquele caso em que você acaba em um loop (muito grande ou infinito) do qual não consegue sair.

Eu recomendo que, durante o desenvolvimento, se você quiser uma opção de depuração bem direta, use uma opção de depuração que permita uma pausa. (PS Opera, Safari? E Chrome? Todos têm isso disponível em seus diálogos nativos)

//global flag
_debug = true;
function debug(msg){
  if(_debug){
    if(!confirm(msg + '\n\nPress Cancel to stop debugging.')){
      _debug = false;
    }
  }
}

Com o acima, você pode entrar em um grande ciclo de depuração de pop-up, onde pressionar Enter/ Okpermite que você pule por cada mensagem, mas pressionar Escape/ Cancelpermite que você interrompa bem.

Scunliffe
fonte
6

Eu uso o menu / console do desenvolvedor do WebKit (Safari 4). É quase idêntico ao Firebug.

console.log()é o novo preto - muito melhor do que alert().

Ryan Florence
fonte
2
Se você colocar console.log em todo o código, lembre-se de removê-los, pois isso interromperá o IE.
Liam
5

Meu primeiro passo é sempre validar o HTML e verificar a sintaxe com JSLint . Se você tiver uma marcação limpa e um código JavaScript válido, é hora de Firebug ou outro depurador.

Ken
fonte
Link do @Ken quebrado :(
Thirisangu Ramanathan
@Thirisangu Obrigado! Link corrigido
Ken
3

O Visual Studio 2008 tem algumas ferramentas de depuração de JavaScript muito boas. Você pode descartar um ponto de interrupção no código JavaScript do lado do cliente e percorrê-lo usando exatamente as mesmas ferramentas que usaria para o código do lado do servidor. Não há necessidade de anexar a um processo ou fazer algo complicado para ativá-lo.

JohnFx
fonte
3

Eu uso algumas ferramentas: Fiddler , Firebug e Visual Studio. Ouvi dizer que o Internet Explorer 8 tem um bom depurador integrado.

d34dIO
fonte
Por "Fiddler", você quer dizer Fiddler Web Debugger?
Thomas L Holaday
3

Eu costumava usar o Firebug , até o Internet Explorer 8 sair. Não sou um grande fã do Internet Explorer, mas depois de passar algum tempo com as ferramentas de desenvolvedor integradas, que incluem um depurador muito bom, parece inútil usar qualquer outra coisa. Eu tenho que tirar meu chapéu para a Microsoft, eles fizeram um trabalho fantástico nesta ferramenta.

James
fonte
2
Para depuração básica, o depurador IE8 atendeu à maioria das minhas necessidades. No entanto, se você estiver fazendo qualquer tipo de teste de desempenho, encontrará rapidamente a falta do IE. Tive um projeto recentemente que utilizava javascript pesado, e realmente precisávamos cortar as coisas para sistemas inferiores, pois estávamos nos deparando com o temido "erro de script sem resposta". O Firebug foi inestimável neste caso, porque consegui executar o método console.profile () para descobrir onde todo o meu tempo estava sendo gasto.
Gavin
1
O depurador do IE8 também possui um recurso de perfil (embora não tão gráfico quanto o FireBug) que fornece a árvore de chamadas, a contagem de chamadas e o tempo gasto em cada método. Eu achei isso adequado para isolar qual código JS está demorando muito.
James
3

Você também pode verificar o YUI Logger . Tudo que você precisa fazer para usá-lo é incluir algumas tags em seu HTML. É uma adição útil ao Firebug, que é mais ou menos obrigatória.

Rob Lund
fonte
O jQuery não tem funcionalidade semelhante?
shapr de
2

Achei que a nova versão do Internet Explorer 8 (imprensa F12) é muito boa para depurar código JavaScript.

Claro, o Firebug é bom se você usa o Firefox.

JW
fonte
2

Além de usar o depurador de JavaScript do Visual Studio, escrevi meu próprio painel simples que incluo em uma página. É simplesmente como a janela Immediate do Visual Studio. Posso mudar os valores das minhas variáveis, chamar minhas funções e ver os valores das variáveis. Ele simplesmente avalia o código escrito no campo de texto.

Canavar
fonte
2

Estou usando o Venkman , um depurador de JavaScript para aplicativos XUL .

kuy
fonte
2

Se você estiver usando o Visual Studio , basta colocar debugger;acima o código que deseja depurar. Durante a execução, o controle irá pausar naquele lugar, e você pode depurar passo a passo a partir daí.

Estefany Velez
fonte
1

Como acontece com a maioria das respostas, realmente depende: O que você está tentando alcançar com a depuração? Desenvolvimento básico, corrigindo problemas de desempenho? Para o desenvolvimento básico, todas as respostas anteriores são mais do que adequadas.

Para testes de desempenho especificamente, eu recomendo Firebug. Ser capaz de traçar o perfil de quais métodos são mais caros em termos de tempo foi inestimável para uma série de projetos em que trabalhei. À medida que as bibliotecas do lado do cliente se tornam mais e mais robustas e mais responsabilidade é colocada do lado do cliente em geral, esse tipo de depuração e criação de perfil se tornará mais útil.

API Firebug Console: http://getfirebug.com/console.html

Gavin
fonte
0

Ao pressionar,F12 os desenvolvedores da web podem depurar rapidamente o código JavaScript sem sair do navegador. Está integrado em todas as instalações do Windows.

No Internet Explorer 11 , as ferramentas F12 fornecem ferramentas de depuração, como pontos de interrupção, observação e visualização de variáveis ​​locais e um console para mensagens e execução imediata de código.

Reza
fonte
consulte este link: w3schools.com/js/js_debugging.asp também
Reza