Como depurar aplicativos Node.js.

1578

Como depurar um aplicativo de servidor Node.js.

No momento, estou usando principalmente a depuração de alertas com instruções de impressão como esta:

sys.puts(sys.inspect(someVariable));

Deve haver uma maneira melhor de depurar. Eu sei que o Google Chrome tem um depurador de linha de comando. Este depurador também está disponível para o Node.js?

Fabian Jakobs
fonte
3
Você pode usar o Locus para injeção de linha de comando.
Ali Davut 12/12
5
Se você deseja depurar com o appoach IDE tradicional, uso de uso vscode vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578
4
Achei este artigo muito interessante e funciona bem para mim: depurando o Node.js com o Chrome DevTools . Espero que ajude :)
Timbergus
2
"alerta de depuração" :)
The Red Pea
Lembre-se de que você precisa executar o nod com --inspect-brkINSTEAD OF --inspectse quiser depurar o código do servidor real no momento do carregamento. Veja stackoverflow.com/questions/59596138
Jorge Orpinel

Respostas:

1261

O inspetor de nó pode salvar o dia! Use-o em qualquer navegador que suporte o WebSocket . Pontos de interrupção, criação de perfil, codificação ao vivo, etc ... É realmente incrível.

Instale-o com:

npm install -g node-inspector

Então corra:

node-debug app.js
daralthus
fonte
14
O inspetor do nó de desejos estava ativo. O componente de criação de perfil precisa ter amor.
Jonathan Dumaine
13
Infelizmente para mim, o node-inspector não funciona com as versões mais recentes do Node.js e não suporta o log no console do navegador desde a v0.1. node-codein era apenas um buggy. Então, escrevi meu próprio módulo para ajudar na depuração, permitindo despejar objetos e coisas assim no console do navegador da web. Eu pensei que poderia ser útil para outra pessoa: nó-macaco . Além disso, ele funciona tanto no Firefox quanto no Chrome.
precisa
7
Como essa era uma ferramenta aparentemente incrível e popular, certamente o fato de o autor original admitir que não tem mais os recursos para mantê-la não seria um problema, pois a comunidade de código aberto poderia buscá-la.
PeterT
34
Agora, o inspetor agora é mantido ativamente pelo StrongLoop e está trabalhando novamente com a versão mais recente (0.3). Anúncio aqui: blog.strongloop.com/…
balupton
21
"Desde a versão 6.3, o Node.js. fornece um depurador baseado em DevTools que deprecia o Node Inspector. Consulte, por exemplo, esta postagem do blog para começar. O depurador embutido é desenvolvido diretamente pela equipe do V8 / Chromium e fornece certos recursos avançados. recursos (por exemplo, rastreios de pilha longa / assíncrona) que são muito difíceis de implementar no Node Inspector. " - diz o repo nó inspetor
ThisClark
750

Depuração

Criação de perfil

  1. node --prof ./app.js
  2. node --prof-process ./the-generated-log-file

Heapdumps

Flamegraphs

Rastreamento

Exploração madeireira

Bibliotecas que produzem informações de depuração

Bibliotecas que aprimoram as informações de rastreamento de pilha

avaliação comparativa

De outros

Legado

Eles costumam funcionar, mas não são mais mantidos ou não são mais aplicáveis ​​às versões modernas dos nós.

Balupton
fonte
8
Sobre o Nodetime: para aqueles que não desejam enviar seus dados para servidores nodetime, há uma "alternativa" local (ainda baseada no nodetime), o lookmódulo, conforme apontado em stackoverflow.com/questions/12864221/nodejs-memory- criação de perfil
reallynice 25/10
Não acho muito útil os relatórios da CPU do nodetime: 1. Acabei de obter uma árvore de métodos, sem tempo 'próprio'. 2. Parece que os galhos das árvores são aparados abaixo de um certo número de precedentes. Esses 2 dificultam a compreensão de onde a CPU passa a maior parte do tempo.
shacharz
O npm install -g profiler reclama da falta de python no Windows 7. Tentei definir python = C: \ Python34 \, mas isso causa uma falha.
Stepan Yakovenko
O único gerador de perfil que trabalha fora da caixa é o horário do nó. Mas o seu stacktrace de criação de perfil da CPU é inutilizável (não fornece detalhes suficientes). Ferramentas NodeJS 4 msvc 2012 também tem profiler, mas também relatou bug unfixed crítica ...
Stepan Yakovenko
O único perfilador que funcionou para mim foi nprof+ v8.logde node --prof.
Dan Abramov
253

O depurador V8 lançado como parte das Ferramentas do desenvolvedor do Google Chrome pode ser usado para depurar scripts do Node.js. Uma explicação detalhada de como isso funciona pode ser encontrada no wiki do Node.js GitHub .

Fabian Jakobs
fonte
12
Estou interessado, depois da apresentação no Google IO feita por Paul Irish e Pavel, agora é possível depurar o node.js diretamente nas Ferramentas de desenvolvedor do Chrome sem a necessidade de eclipse?
19411 balupton
+1 funcionou muito bem para mim. Usando uma nova versão do Eclipse 3.x, x64 no Mac OS X. As instruções de instalação também estão bem escritas. Obrigado.
barista amador
Também vem dentro Nodeclipse nodeclipse.org (com algumas Node.js bugs relacionados fixo)
Paul Verest
Minha entrada nesta arena é trepanjs ( npmjs.com/package/trepanjs ). Possui toda a bondade do depurador de nós, mas está melhor em conformidade com o gdb. Ele também possui mais recursos e comandos, como destaque de sintaxe, ajuda on-line mais extensa e avaliação mais inteligente. Veja github.com/rocky/trepanjs/wiki/Cool-things para alguns de seus recursos interessantes.
rochoso
1
Atualmente, o recurso está disponível nas versões noturnas. Confira aqui para obter instruções:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone 5/16/16
191

Nó tem seu próprio construído em GUI depurador a partir da versão 6.3 (usando DevTools do Chrome)

Depurador da GUI de nós incorporados

Basta passar a bandeira do inspetor e você receberá um URL para o inspetor:

node --inspect server.js

Você também pode quebrar na primeira linha passando em seu --inspect-brklugar.

Alister
fonte
2
Não para descontar as etapas acima, mas apenas para compartilhar ... Tentei criar um invólucro um pouco mais robusto e fácil de instalar. Veja: github.com/jaridmargolin/inspect-process
Jarid R. Margolin
1
@ JaridR.Margolin Nice. Atualizei a resposta para usá-la. Muito mais fácil de configurar e funciona melhor :)
Gregers
2
Atualmente, esta resposta está na parte inferior e é a única que realmente funcionou para mim. Isso é incrível!
LOAS
3
Caso isso ajude alguém, eu virei um vídeo explicando esse processo em youtu.be/rtZKUnks6jI .
RoccoB
2
Onde você conseguiu o tema sombrio para as ferramentas de desenvolvedor do Chrome?
Pieter Meiresone 10/09
93

O Node.js. versão 0.3.4+ possui suporte a depuração interno.

node debug script.js

Manual: http://nodejs.org/api/debugger.html

JulianW
fonte
1
Você tem algum link para a documentação de como usá-lo?
Fabian Jakobs
2
Eu não tenho nenhum documento. acabou de atualizar para a v0.3.5. coloque uma linha "debugger"; no seu código que atuará como ponto de interrupção. Funciona como ndb / gdb. depois de fazer "node debug script.js", digite help. Você verá o comando que ele suporta. p = impressão, l = list ... assim você não precisa digitar o mundo cheio
JulianW
2
Observe que, no Windows, é "node.exe --debug myscript.js", mas ainda não funciona.
Marc
6
Você provavelmente precisa mudar --debugpara debugsem os traços. Foi assim que finalmente consegui que funcionasse. É confuso --debuge debugfaz duas coisas diferentes.
benekastah
Como você consegue executar o programa? "r -> app is already running...", quando tento continuar e deparo com uma instrução que está tentando obter entrada, ela retorna ao prompt de depuração em vez de me deixar inserir a entrada necessária.
Michael
70

O Código do Visual Studio será minha opção para depuração. Nenhuma sobrecarga de instalação de ferramentas ounpm installoutras coisas. Basta definir o ponto de partida do seu aplicativo no package.json e o VSCode criará automaticamente um arquivo de configuração dentro da sua solução. ÉbaseadonoElectron, no qual editores como o Atom são criados.

O Código VS oferece uma experiência de depuração semelhante à de outros IDEs, como VS, Eclipse, etc.

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

Shreyas
fonte
É legal, mas tem atraso. É por isso que eu prefiro o Sublime.
calbertts
3
mas sublime não tem um depurador, e eu acho que o código VS é bastante rápido demais
Syed Faizan
1
Eu tenho uma licença sublime desde 5 anos atrás. Desde alguns meses atrás, eu nem instalo o Sublime Text, apenas vscode. Fora da caixa tem muitas ferramentas que eu sinto falta no Sublime (como o terminal integrado ..).
elboletaire
sempre me pedindo uma pasta de configuração, ele não funciona fora da caixa
carkod
@carkod permitir vs código de auto anexar preferência e usar o vs código de terminal para iniciar o seu roteiro, ex nó --inspect file-name.js
Vipul Dessai
57

Eu pessoalmente uso o JetBrains WebStorm , pois é o único IDE JavaScript que eu achei excelente para JavaScript front-end e back-end.

Ele funciona em vários sistemas operacionais e possui a depuração do Node.js integrada (além de várias outras coisas) ( http://www.jetbrains.com/webstorm/features/index.html ).

Meus únicos itens de "problemas" / lista de desejos estamos foram :

  1. Parece ter mais recursos no Mac do que no Windows Não parece mais um problema na versão 6.
  2. Seria bom se ele tivesse suporte a Snippet (como os do Sublime Text 2 - ou seja, digite 'fun' e toque em 'tab' para inserir uma função. Veja o comentário @WickyNilliams abaixo - Com os Live Templates, você também tem suporte para snippets.
isNaN1247
fonte
10
o webstorm tem suporte para trechos BTW ;-), embora sejam conhecidos como "Modelos ao vivo" em vez de trechos.
WickyNilliams 26/09/12
3
Se você deseja apenas depurar um aplicativo node.js. e já possui uma licença Intellij IDEA, basta instalar o plug-in node.js. sem precisar comprar a licença WebStorm. Definir uma configuração de execução / depuração é muito fácil quando o plug-in é instalado.
Josh Liptzin
42

Muitas ótimas respostas aqui, mas eu gostaria de adicionar minha visão (com base em como minha abordagem evoluiu)

Logs de depuração

Vamos ser sinceros, todos nós gostamos de algo bom console.log('Uh oh, if you reached here, you better run.')e, às vezes, que funciona muito bem, por isso, se você é reticente em se afastar demais, adicione pelo menos um pouco de brilho aos seus logs com a depuração do Visionmedia .

Depuração interativa

Tão útil quanto o log do console pode ser, para depurar profissionalmente, você precisa arregaçar as mangas e ficar preso. Defina pontos de interrupção, percorra seu código, inspecione escopos e variáveis ​​para ver o que está causando esse comportamento estranho. Como outros já mencionaram, o inspetor de nós é realmente o joelho das abelhas. Ele faz tudo o que você pode fazer com o depurador embutido, mas usando a interface familiar do Chrome DevTools. Se, como eu, você usa o Webstorm , aqui está um guia útil para depuração a partir daí.

Rastreios de pilha

Por padrão, não podemos rastrear uma série de operações em diferentes ciclos do loop de eventos (ticks). Para contornar isso, dê uma olhada em longjohn (mas não em produção!).

Perdas de memória

Com o Node.js, podemos esperar que um processo do servidor permaneça ativo por um tempo considerável. O que você faz se acha que houve alguns vazamentos desagradáveis? Use heapdump e o Chrome DevTools para comparar alguns instantâneos e ver o que está mudando.


Para alguns artigos úteis, confira

Se você quiser assistir a um vídeo, então

Seja qual for o caminho escolhido, certifique-se de entender como você está depurando

insira a descrição da imagem aqui

É uma coisa dolorosa
Olhar para o seu próprio problema e saber
Que você mesmo e mais ninguém conseguiu

Sophocles, Ajax

Philip O'Brien
fonte
41

Theseus é um projeto da pesquisa da Adobe que permite depurar o código Node.js. nos suportes do editor de código-fonte aberto . Possui alguns recursos interessantes, como cobertura de código em tempo real, inspeção retroativa e árvore de chamadas assíncronas.

captura de tela

Sindre Sorhus
fonte
isso é muito legal, ainda não sei o que é Backtrace para tho
misaxi
Atualmente, estou amando Teseu, mas ainda tenho alguns problemas em que preciso definir um ponto de interrupção e rastrear. No momento, estou tendo que matar meu aplicativo, iniciar o nó com --debug, rastrear através e, em seguida, iniciar o aplicativo com node-theseus. É possível usar o Theseus com pontos de interrupção? Eu tentei pesquisar na página do GitHub, StackOverflow e fóruns, mas sem sorte até agora. Estou esquecendo de algo?
Eugene
25

As ferramentas do Node.js. para o Visual Studio 2012 ou 2013 incluem um depurador. A visão geral aqui afirma "As ferramentas do Node.js. para o Visual Studio incluem suporte completo para aplicativos de nó de depuração". Sendo novo no Node.js, mas com experiência em .NET, achei esse complemento uma ótima maneira de depurar aplicativos Node.js.

John81
fonte
23

O Visual Studio Code tem um suporte de depuração muito bom para o Node.js. É gratuito, de código aberto e multiplataforma e roda em Linux, OS X e Windows.

Você pode até depurar tarefas grunt e gulp , caso precise ...

Hans
fonte
1
A partir do Visual Studio Code 8.0, o suporte à depuração para OSX e Linux ficou muito bom.
bgse
Depois de passar uma noite inteira fazendo o inspetor de nó e o strongloop funcionarem no Windows (Comunidade do Visual Studio, faça o downgrade para o npm 2, instalando python, variáveis ​​env, use cmd não babun / cygwin etc. etc.) e depois jogue com ele por uma hora , eu tenho que dizer que esta é a melhor opção, pelo menos no Windows e, possivelmente, em geral (se você não tem webstorn)
dashambles
22

Eu escrevi uma abordagem diferente para depurar o código Node.js, que é estável e extremamente simples. Está disponível em https://github.com/sa/iron-node .

Digite a descrição da imagem aqui

Um depurador visual de plataforma cruzada de código-fonte aberto.

Instalação:

npm install iron-node -g;

Depurar:

iron-node yourscript.js;

Stephan Ahlf
fonte
15

Se você estiver usando o Atom IDE , poderá instalar o node-debuggerpacote.

Uchiha Itachi
fonte
15

Usando a versão 67.0.3396.62 do Chrome (+)

  1. Executar aplicativo do nó

nó --inspect-brk = 0.0.0.0: 9229 server.js (nome do arquivo js do servidor)

  1. Navegue no seu aplicativo no chrome, por exemplo, "localhost: port"
  2. Abra o DevTools.
  3. Clique no ícone do nó ao lado do ícone do dispositivo responsivo.

insira a descrição da imagem aqui

Haverá outra janela do DevTools que será exibida especificamente para o aplicativo do nó de depuração.

insira a descrição da imagem aqui

babidi
fonte
13

Criei uma pequena ferramenta interessante chamada pry.js que pode ajudá-lo.

Coloque uma declaração simples em algum lugar do seu código, execute seu script normalmente e o node interromperá o encadeamento atual, fornecendo acesso a todas as suas variáveis ​​e funções. Veja / edite / apague-os à vontade!

var pry = require('pryjs')

class FizzBuzz

  run: ->
    for i in [1..100]
      output = ''
      eval(pry.it) // magic
      output += "Fizz" if i % 3 is 0
      output += "Buzz" if i % 5 is 0
      console.log output || i

  bar: ->
    10

fizz = new FizzBuzz()
fizz.run()
Blaine
fonte
11

Há um cliente depurador de linha de comando interno no Node.js. O IDE do Cloud 9 também possui um depurador (visual) bastante agradável .

yojimbo87
fonte
O Cloud 9 é o caminho certo para mim, especialmente oferecendo a opção de liberdade de código em qualquer lugar sem levar meu laptop.
Teoman shipahi
8

Inicie o processo do nó com o sinalizador --inspect .

node --inspect index.js

e depois abra chrome://inspectno chrome. Clique no link "Abrir DevTools dedicado para Nó" ou instale este extensão do Chrome para abrir facilmente o DevTools do Chrome.

Para mais informações, consulte este link

Rahul Kumar
fonte
7

Se você precisar de uma biblioteca de log poderosa para o Node.js, o Tracer https://github.com/baryon/tracer é a melhor opção.

Ele gera mensagens de registro com registro de data e hora, nome do arquivo, nome do método, número da linha, caminho ou pilha de chamadas, suporta console de cores e suporta banco de dados, arquivo e transporte de fluxo com facilidade. Eu sou o autor.

Baryon Lee
fonte
7

Supondo que você tenha o node-inspector instalado no seu computador (caso contrário, digite 'npm install -g node-inspector'), basta executar:

node-inspector & node --debug-brk scriptFileName.js

E cole o URI da linha de comando em um navegador WebKit (Chrome / Safari).

Shaheen Ghiassy
fonte
1
o inspetor de nós foi mencionado; talvez excluir esta resposta?
Dan Dascalescu 12/02
5

O IntelliJ funciona maravilhosamente para o Node.js.

Além disso, o IntelliJ suporta bem o 'Code Assistance'.

卢 声 远 Shengyuan Lu
fonte
4

O NetBeans IDE possui suporte ao Node.js. desde a versão 8.1 :

<...>

Destaques dos novos recursos

Desenvolvimento de aplicativos Node.js.

  • Assistente de Novo Projeto Node.js.
  • Assistente para novo Node.js Express
  • Editor JavaScript aprimorado
  • Novo suporte para a execução de aplicativos Node.js.
  • Novo suporte para depuração de aplicativos Node.js.

<...>

Referências adicionais:

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. Aplicativo Node.js Express no NetBeans IDE, Geertjan-Oracle .
Sergey Brunov
fonte
4

Use estes comandos

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect
Zahirul Haque
fonte
3

Uma maneira rápida e suja de depurar pequenos scripts do Node.j com o depurador de navegador favorito seria usar o browserify . Observe que essa abordagem não funciona com aplicativos que exijam bibliotecas de E / S nativas, mas é boa o suficiente para a maioria dos scripts pequenos.

$ npm install -g browserify

Agora mova todas as suas var x = requires('x')chamadas para um requires.jsarquivo e execute:

$ browserify requires.js -s window -o bundle.js

(A desvantagem aqui é que você deve mover ou comentar requiresem todos os seus arquivos.)

Inclua o bundle.jsem um arquivo HTML da seguinte forma:

<script type="text/javascript" src="bundle.js"></script>

Agora carregue o arquivo no seu navegador e pressione F12e viola: debug no navegador.

Gerold Meisinger
fonte