Come posso eseguire il debug delle applicazioni Node.js?


1578

Come eseguire il debug di un'applicazione server Node.js?

In questo momento sto utilizzando principalmente il debug degli avvisi con istruzioni di stampa come questa:

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

Ci deve essere un modo migliore per eseguire il debug. So che Google Chrome ha un debugger da riga di comando. Questo debugger è disponibile anche per Node.js?


3
È possibile utilizzare Locus per l'iniezione da riga di comando.
Ali Davut,

5
Se si desidera eseguire il debug con l'approccio IDE tradizionale, utilizzare vscode, utilizzare vscode youtube.com/watch?v=egBJ0cd0GLM
jw56578,

4
Ho trovato questo articolo molto interessante e per me funziona benissimo: debug di Node.js con Chrome DevTools . Spero che sia d'aiuto :)
Timbergus,

2
"alert debugging" :)
The Red Pea,

Tenere presente che è necessario eseguire nod con --inspect-brkINSTEAD OF --inspectse si desidera eseguire il debug del codice server effettivo al momento del caricamento. Vedere stackoverflow.com/questions/59596138
Jorge Orpinel

Risposte:


1261

nodo-ispettore potrebbe salvare la giornata! Usalo da qualsiasi browser che supporti WebSocket . Punti di interruzione, profiler, livecoding, ecc ... È davvero fantastico.

Installalo con:

npm install -g node-inspector

Quindi eseguire:

node-debug app.js

14
Desideri che il nodo-ispettore fosse attivo. La componente di profilazione deve ottenere un po 'd'amore.
Jonathan Dumaine,

13
Sfortunatamente per me, node-inspector non funziona con le ultime versioni di Node.js e non supporta la registrazione sulla console del browser dalla v0.1. node-codein era solo buggy. Quindi, ho scritto il mio modulo per aiutare con il debug consentendo di scaricare oggetti e simili sulla console del browser Web. Ho pensato che potesse essere utile a qualcun altro: nodo-scimmia . Inoltre funziona sia in Firefox che in Chrome.
Justin Warkentin,

7
Dato che si trattava di uno strumento tanto apparentemente sorprendente e popolare, sicuramente il fatto che l'autore originale abbia ammesso di non avere più le risorse per mantenerlo non sarebbe un problema in quanto la comunità open source potrebbe prenderlo?
PeterT

34
Ora inspector è ora attivamente gestito da StrongLoop e sta lavorando di nuovo con l'ultima versione (0.3) yay! Annuncio qui: blog.strongloop.com/…
balupton

21
"Dalla versione 6.3, Node.js offre un debugger integrato basato su DevTools che depreca principalmente Node Inspector, per esempio, vedi questo post del blog per iniziare. Il debugger integrato è sviluppato direttamente dal team V8 / Chromium e fornisce alcuni avanzati caratteristiche (ad es. tracce di stack lunghe / asincrone) che sono troppo difficili da implementare in Node Inspector. " - dice il repository inspector nodo
ThisClark

750

Debug

profiling

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

Heapdumps

Flamegraphs

tracciato

Registrazione

Librerie che producono informazioni di debug

Librerie che migliorano le informazioni sulla traccia dello stack

Analisi comparativa

Altro

eredità

Questi usano per funzionare ma non sono più mantenuti o non sono più applicabili alle moderne versioni dei nodi.


8
Informazioni su Nodetime: per coloro che non vogliono inviare i propri dati ai server nodetime esiste una "alternativa" locale (è ancora basata su nodetime), il lookmodulo, come sottolineato in stackoverflow.com/questions/12864221/nodejs-memory- profilazione
reallynice

Non trovo molto utili i resoconti della cpu di nodetime: 1. Ricevo solo un albero di metodi, senza tempo di "auto". 2. Sembra che i rami degli alberi siano tagliati sotto un certo numero di precentage. Quei 2 rendono molto difficile capire dove la cpu trascorre la maggior parte del suo tempo.
Shacharz,

npm install -g profiler si lamenta della mancanza di Python su Windows 7. Ho provato a impostare Python = C: \ Python34 \, ma questo provoca un arresto anomalo.
Stepan Yakovenko,

L'unico profiler pronto all'uso è il nodetime. Ma il suo stacktrace di profilazione della CPU è inutilizzabile (non fornisce abbastanza dettagli). Anche gli strumenti di Nodejs 4 msvc 2012 hanno un profiler, ma ha anche segnalato un bug critico non risolto ...
Stepan Yakovenko

L'unico profiler che ha funzionato per me è stato nprof+ v8.logda node --prof.
Dan Abramov,

253

Il debugger V8 rilasciato come parte degli Strumenti per sviluppatori Google Chrome può essere utilizzato per eseguire il debug degli script Node.js. Una spiegazione dettagliata di come funziona questo possono essere trovati nel wiki Node.js GitHub .


12
Sono interessato, dopo la presentazione a Google IO che Paul Irish e Pavel hanno fatto, è ora possibile eseguire il debug di node.js direttamente su Chrome Developer Tools senza la necessità di eclipse?
Balupton,

+1 Ha funzionato molto bene per me. Utilizzando una nuova versione di Eclipse 3.x, x64 su Mac OS X. Anche le istruzioni di installazione sono ben scritte. Grazie.
barista dilettante

Viene anche all'interno di Nodeclipse nodeclipse.org (con alcuni bug relativi a Node.js corretti)
Paul Verest,

La mia entrata in questa arena è trepanjs ( npmjs.com/package/trepanjs ). Ha tutta la bontà del debugger del nodo, ma si conforma meglio a gdb. Ha anche più funzioni e comandi come l'evidenziazione della sintassi, una guida in linea più ampia e una valutazione più intelligente. Vedi github.com/rocky/trepanjs/wiki/Cool-things per alcune delle sue fantastiche funzionalità.
roccioso,

1
La funzione è attualmente disponibile nelle versioni notturne. Controlla qui per le istruzioni:https://medium.com/@paul_irish/debugging-node-js-nightlies-with-chrome-devtools-7c4a1b95ae27#.fitvuaumt
zeronone,

191

Il nodo ha il suo costruito nel debugger GUI a partire dalla versione 6.3 (usando DevTools di Chrome)

Debuger integrato nella GUI dei nodi

Basta passare la bandiera dell'ispettore e ti verrà fornito un URL per l'ispettore:

node --inspect server.js

Puoi anche interrompere la prima riga passando --inspect-brkinvece.


2
Non per scartare i passaggi precedenti, ma solo per condividere ... Ho provato a creare un wrapper leggermente più robusto, oltre che più facile da installare. Vedi: github.com/jaridmargolin/inspect-process
Jarid R. Margolin

1
@ JaridR.Margolin Nice. Ho aggiornato la risposta per usarla invece. Molto più facile da installare e funziona meglio :)
Gregers

2
Questa risposta è attualmente in fondo ed è l'unica che ha funzionato per me. Questo è fantastico!
LOAS

3
Nel caso in cui aiuti qualcuno, ho lanciato un video che spiega questo processo su youtu.be/rtZKUnks6jI .
RoccoB,

2
Dove hai preso il tema oscuro per gli strumenti di sviluppo di Chrome?
Pieter Meiresone,

93

Node.js versione 0.3.4+ ha il supporto di debug integrato.

node debug script.js

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


1
Hai dei collegamenti alla documentazione su come usarlo?
Fabian Jakobs,

2
Non ho documenti. appena aggiornato alla v0.3.5. mettere una riga "debugger;" nel tuo codice che fungerà da punto di interruzione. Funziona come ndb / gdb. dopo aver eseguito "node debug script.js" digitare help. vedrai il comando che supporta. p = print, l = list ... quindi non è necessario digitare il mondo intero
JulianW

2
Nota, sotto Windows è "node.exe --debug myscript.js" ma continua a non funzionare.
Marc,

6
Probabilmente devi passare --debuga debugsenza i trattini. È così che finalmente l'ho fatto funzionare. Lo confonde --debuge debugfa due cose diverse.
Benekastah,

Come si ottiene effettivamente l'esecuzione del programma? "r -> app is already running...", quando provo a continuare e mi imbatto in una dichiarazione che sta cercando di ottenere l'input, mi riporta al prompt di debug invece di farmi inserire l'input richiesto.
Michael,

70

Visual Studio Code sarà la mia scelta per il debug. Nessun sovraccarico per l'installazione di strumenti onpm installcose. Basta impostare il punto di partenza della tua app in package.json e VSCode creerà automaticamente un file di configurazione all'interno della tua soluzione. ÈbasatosuElectron, su cui sono costruiti editor come Atom.

Il codice VS offre un'esperienza di debug simile a quella che potresti aver avuto in altri IDE come VS, Eclipse, ecc.

inserisci qui la descrizione dell'immagine inserisci qui la descrizione dell'immagine


È bello ma ha un ritardo. Ecco perché preferisco Sublime di sempre.
calbertts,

3
ma sublime non ha un debugger e penso che anche il codice VS sia abbastanza veloce
Syed Faizan,

1
Ho una licenza sublime da 5 anni fa. Da qualche mese non installo nemmeno Sublime Text, vscode. Out of the box ha molti strumenti che mi mancano in Sublime (come il terminale integrato ..).
elboletaire

chiedendomi sempre una cartella di configurazione, non funziona
immediatamente

@carkod abilita la preferenza di collegamento automatico vs code e usa il terminale vs code per avviare lo script, ad esempio nodo --inspect file-name.js
Vipul Dessai

57

Personalmente utilizzo JetBrains WebStorm in quanto è l'unico IDE JavaScript che ho trovato, il che è ottimo sia per il frontend che per il backend JavaScript.

Funziona su più sistemi operativi e ha il debug Node.js integrato (oltre a un sacco di altre cose) ( http://www.jetbrains.com/webstorm/features/index.html ).

Le mie uniche voci "emissioni" / lista desideri siamo erano :

  1. Sembra essere più affamato di risorse su Mac di Windows Non sembra più un problema nella versione 6.
  2. Sarebbe bello se avesse il supporto Snippet (come quelli di Sublime Text 2 - ovvero digita "fun" e tocca "tab" per inserire una funzione. Vedi il commento di @WickyNilliams di seguito: con i modelli live hai anche il supporto per frammenti.

10
webstorm ha il supporto dello snippet BTW ;-) anche se sono conosciuti come "Modelli live" anziché snippet.
WickyNilliams,

3
Se desideri semplicemente eseguire il debug di un'app node.js e disponi già di una licenza Intellij IDEA, puoi semplicemente installare il plug-in node.js senza dover acquistare la licenza WebStorm. La configurazione di una configurazione di esecuzione / debug è molto semplice dopo l'installazione del plug-in.
Josh Liptzin,

42

Molte ottime risposte qui, ma vorrei aggiungere la mia visione (basata su come si è evoluto il mio approccio)

Log di debug

Ammettiamolo, amiamo tutti un bene console.log('Uh oh, if you reached here, you better run.')e talvolta funziona benissimo, quindi se sei reticente a spostarti troppo lontano da esso almeno aggiungi un po 'di bling ai tuoi log con il debug di Visionmedia .

Debug interattivo

Per quanto sia pratico il logging della console, per eseguire il debug in modo professionale è necessario rimboccarsi le maniche e rimanere bloccati. Impostare punti di interruzione, scorrere il codice, ispezionare ambiti e variabili per vedere cosa sta causando quel comportamento strano. Come altri hanno già detto, l' ispettore del nodo è davvero le api-ginocchia. Fa tutto quello che puoi fare con il debugger integrato, ma usando quella familiare interfaccia DevTools di Chrome. Se, come me, usi Webstorm , ecco una guida utile per il debug da lì.

Stack Traces

Per impostazione predefinita, non possiamo tracciare una serie di operazioni attraverso diversi cicli del ciclo degli eventi (tick). Per aggirare questo, dai un'occhiata a Longjohn (ma non in produzione!).

Perdite di memoria

Con Node.js possiamo aspettarci che un processo server rimanga attivo per un tempo considerevole. Cosa fai se pensi che abbia prodotto alcune brutte perdite? Usa heapdump e Chrome DevTools per confrontare alcune istantanee e vedere cosa sta cambiando.


Per alcuni articoli utili, controlla

Se hai voglia di guardare un video, allora

Qualunque sia il percorso che scegli, assicurati di capire come stai eseguendo il debug

inserisci qui la descrizione dell'immagine

È doloroso
guardare ai tuoi problemi e sapere
che tu stesso e nessun altro ce l' hai fatta

Sofocle, Ajax


41

Teseo è un progetto della ricerca Adobe che consente di eseguire il debug del codice Node.js nelle parentesi dell'editor Open Source . Ha alcune caratteristiche interessanti come la copertura del codice in tempo reale, l'ispezione retroattiva, l'albero delle chiamate asincrono.

immagine dello schermo


questo è abbastanza bello, ancora non so cosa sia Backtrace per tho
misaxi

Attualmente sto amando Teseo, ma ho ancora alcuni problemi in cui ho bisogno di impostare un breakpoint e rintracciare. Attualmente sto per uccidere la mia app, avviare il nodo con --debug, tracciare trhough e quindi avviare l'app con node-theseus. È possibile utilizzare Teseo con i punti di interruzione? Ho provato a cercare nella pagina GitHub, StackOverflow e forum, ma finora non ho avuto fortuna. Mi sto perdendo qualcosa?
Eugene,

25

Strumenti Node.js per Visual Studio 2012 o 2013 include un debugger. La panoramica qui afferma "Node.js Tools per Visual Studio include il supporto completo per le app del nodo di debug". Essendo nuovo in Node.js, ma avendo un background in .NET, ho scoperto che questo componente aggiuntivo è un ottimo modo per eseguire il debug delle applicazioni Node.js.


23

Visual Studio Code ha davvero un buon supporto per il debug di Node.js. È gratuito, open source e multipiattaforma e funziona su Linux, OS X e Windows.

Puoi anche eseguire il debug di compiti grugniti e gulp , nel caso in cui dovessi ...


1
A partire da Visual Studio Code 8.0, il supporto al debug per OSX e Linux è diventato davvero buono.
bgse

Dopo aver trascorso un'intera serata a far funzionare nodi-inspector e strongloop sotto Windows (Visual Studio Community, eseguire il downgrade a npm 2, installare python, variabili env, usare cmd non babun / cygwin ecc. Ecc.) E poi giocare con questo per un'ora , Devo dire che questa è l'opzione migliore almeno in Windows e forse in generale (se non si dispone di Webstorn)
dashambles

22

Ho scritto un approccio diverso per il debug del codice Node.js che è stabile ed estremamente semplice. È disponibile su https://github.com/sa/iron-node .

Inserisci qui la descrizione dell'immagine

Un debugger visivo multipiattaforma opensource.

Installazione:

npm install iron-node -g;

Debug:

iron-node yourscript.js;



15

Utilizzo della versione di Chrome 67.0.3396.62 (+)

  1. Esegui l'app nodo

nodo --inspect-brk = 0.0.0.0: 9229 server.js (nome file server js)

  1. Sfoglia l'app in Chrome, ad es. "Localhost: port"
  2. Apri DevTools.
  3. Fai clic sull'icona del nodo accanto all'icona del dispositivo reattivo.

inserisci qui la descrizione dell'immagine

Verrà visualizzata un'altra finestra DevTools che verrà visualizzata in modo specifico per l'app di debug del nodo.

inserisci qui la descrizione dell'immagine


13

Ho creato un piccolo strumento ordinato chiamato pry.js che può aiutarti.

Inserisci una semplice dichiarazione da qualche parte nel tuo codice, esegui lo script normalmente e il nodo interromperà il thread corrente dandoti accesso a tutte le variabili e funzioni. Visualizza / modifica / eliminali a piacimento!

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()





8

Inizia il processo del nodo con --inspect flag.

node --inspect index.js

e quindi Apri chrome://inspectin Chrome. Fare clic su "DevTools dedicato Open per il nodo" link o installare questo estensione di Chrome per aprire facilmente Chrome DevTools.

Per maggiori informazioni consultare questo link


7

Se hai bisogno di una potente libreria di registrazione per Node.js, Tracer https://github.com/baryon/tracer è la scelta migliore.

Emette messaggi di log con un timestamp, nome file, nome metodo, numero linea, stack percorso o chiamate, supporto console colori e supporto database, file, trasporto flusso facilmente. Sono l'autore


7

Supponendo che sul tuo computer sia installato nodo-inspector (in caso contrario, digita semplicemente 'npm install -g node-inspector') devi solo eseguire:

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

E incolla l'URI dalla riga di comando in un browser WebKit (Chrome / Safari).


1
nodo-ispettore era già stato menzionato; forse cancellare questa risposta?
Dan Dascalescu,





4

L' IDE NetBeans ha avuto il supporto Node.js dalla versione 8.1 :

<...>

Aspetti salienti delle nuove funzionalità

Sviluppo di applicazioni Node.js

  • Nuova procedura guidata per il progetto Node.js
  • Nuova procedura guidata Node.js Express
  • Editor JavaScript avanzato
  • Nuovo supporto per l'esecuzione di applicazioni Node.js
  • Nuovo supporto per il debug delle applicazioni Node.js.

<...>

Riferimenti aggiuntivi:

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. App Node.js Express nell'IDE NetBeans, Geertjan-Oracle .

4

Usa questo comando

DEBUG_LEVEL=all node file.js
DEBUG=* node file.js
node file.js --inspect


3

Un modo semplice e veloce per eseguire il debug di piccoli script Node.js con il tuo debugger del browser preferito sarebbe usare browserify . Si noti che questo approccio non funziona con le applicazioni che richiedono librerie di I / O native, ma è abbastanza buono per la maggior parte degli script di piccole dimensioni.

$ npm install -g browserify

Ora sposta tutte le var x = requires('x')chiamate in un requires.jsfile ed esegui:

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

(Il rovescio della medaglia qui è che devi spostare o commentare requiresin tutti i tuoi file.)

Includere bundle.jsin un file HTML in questo modo:

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

Ora carica il file nel tuo browser e premi F12e viola: debug nel browser.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.