Come faccio a eseguire il debug delle applicazioni Node.js?

Come si esegue il debug di un’applicazione del server Node.js?

In questo momento sto principalmente usando il debugging degli avvisi con dichiarazioni 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?

node-inspector potrebbe salvare il giorno! Usalo da qualsiasi browser che supporti WebSocket . Punti di interruzione, profiler, livecoding, ecc … È davvero fantastico.

Installalo con:

 npm install -g node-inspector 

Quindi esegui:

 node-debug app.js 

Debug

  • Guida di Joyent
  • Debugger
  • Node Inspector
  • Codice di Visual Studio
  • Nuvola 9
  • Parentesi

profiling

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

Heapdumps

  • node-heapdump con gli Strumenti per sviluppatori di Chrome

Flamegraphs

  • 0x
  • jam3 / devtool quindi i diagrammi di fiamma degli strumenti per sviluppatori di Chrome
  • Dtrace e StackVis : supportati solo su SmartOS

tracciato

  • Tracce di stack interattive con TraceGL

Registrazione

Librerie che generano informazioni di debug

  • bruco
  • Tracer

Librerie che migliorano le informazioni di traccia dello stack

  • Longjohn

Benchmarking

  • Apache Bench : ab -n 100000 -c 1 http://127.0.0.1:9778/
  • WRK

Altro

  • Traccia
  • vantaggio
  • sodomita
  • Google Tracing Framework
  • Paul Irish’s Guide

eredità

Questi funzionano per funzionare ma non sono più mantenuti o non sono più applicabili alle versioni di nodo moderne.

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

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

Debugger integrato nella GUI dei nodi

Basta passare il flag di ispezione e ti verrà fornito un URL per l’ispettore:

 node --inspect server.js 

Puoi anche interrompere la prima riga passando invece --inspect-brk .

Per aprire automaticamente una finestra di Chrome, utilizzare il modulo di controllo inspect.

 # install inspect-process globally npm install -g inspect-process # start the debugger with inspect inspect script.js 

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

node debug script.js

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

Il codice di Visual Studio sarà la mia scelta per il debug. Nessun sovraccarico di installazione di strumenti o npm install . 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. È costruito su Electron , su cui sono costruiti editor come Atom.

VS Code offre un’esperienza di debug simile a quella che potresti avere in altri IDE come VS, Eclipse, ecc.

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

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

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

I miei unici elementi ‘problemi’ / lista dei desideri siamo erano :

  1. Sembra essere più affamato di risorse su Mac rispetto a Windows Non sembra più un problema nella versione 6.
  2. Sarebbe bello se avesse il supporto di Snippet (come quelli di Sublime Text 2 – cioè digita “fun” e tocca “tab” per inserire una funzione. Vedi il commento di @WickyNilliams qui sotto – Con Live Templates hai anche il supporto per gli snippet.

Theseus è un progetto di ricerca di Adobe che ti consente di eseguire il debug del codice Node.js nei relativi editor di Open Source. Ha alcune caratteristiche interessanti come la copertura del codice in tempo reale, l’ispezione retrotriggers, l’albero delle chiamate asincrone.

immagine dello schermo

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

Log di debug

Ammettiamolo, tutti noi amiamo un buon console.log('Uh oh, if you reached here, you better run.') Ea volte funziona alla grande, quindi se sei reticente a muoverti troppo lontano da esso almeno aggiungi un po ‘di bling ai tuoi registri con il debug di Visionmedia .

Debug interattivo

Utile come la registrazione della console, per eseguire il debug in modo professionale è necessario rimboccarsi le maniche e rimanere bloccati. Imposta i punti di interruzione, controlla il codice, ispeziona ambiti e variabili per vedere cosa causa questo strano comportamento. Come altri hanno già accennato, l’ ispettore di nodes è davvero le api-ginocchia. Fa tutto ciò che puoi fare con il debugger integrato, ma usando quella familiare interfaccia di Chrome DevTools. Se, come me, usi Webstorm , allora ecco una guida pratica per il debug da lì.

Stack Traces

Per impostazione predefinita, non possiamo tracciare una serie di operazioni tra diversi cicli del ciclo degli eventi (tick). Per aggirare questo sguardo a longjohn (ma non in produzione!).

Perdite di memoria

Con Node.js possiamo avere un processo del server che dovrebbe rimanere attivo per un tempo considerevole. Che cosa fai se pensi che siano scaturite alcune brutte notizie? Usa heapdump e Chrome DevTools per confrontare alcune istantanee e vedere cosa sta cambiando.


Per alcuni articoli utili, controlla

  • RisingStack – Debug delle applicazioni Node.js
  • Ottimo articolo di David Mark Clements di nearForm

Se hai voglia di guardare un video (s) allora

  • Netflix JS Talks: debug di Node.js in produzione
  • Video interessante dal gruppo di lavoro di tracciamento sulla traccia e sul debug di node.js
  • Video di 15 minuti davvero informativo su node-inspector

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

inserisci la descrizione dell'immagine qui

È una cosa dolorosa
Per guardare i tuoi problemi e sapere
Che tu stesso e nessun altro ce l’abbia fatta

Sofocle, Ajax

Node.js Tools per Visual Studio 2012 o 2013 include un debugger. La panoramica qui afferma “Node.js Tools per Visual Studio include il supporto completo per il debug delle app di nodo.”. Essendo nuovo a Node.js, ma avendo uno sfondo in. NET, ho trovato questo add-in per essere un ottimo modo per eseguire il debug di applicazioni Node.js.

Il codice di Visual Studio presenta un supporto per il debug di Node.js davvero piacevole. È gratuito, open source e multipiattaforma e funziona su Linux, OS X e Windows.

Puoi anche eseguire il debug di grunt e gulp , dovresti aver bisogno di …

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

Inserisci qui la descrizione dell'immagine

Un debugger visivo cross-platform opensource.

Installazione:

npm install iron-node -g;

Debug:

iron-node yourscript.js;

Se si utilizza Atom IDE , è ansible installare il pacchetto node-debugger .

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

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

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

Esiste un client di debugger della riga di comando incorporato all’interno di Node.js. Cloud 9 IDE ha anche un debugger (visivo) piuttosto carino.

Visual Studio Code funzionerà per noi nel debug.

Ho messo insieme un primer di debug di Node.js su come usare l’ ispettore del nodo per coloro che non sanno da dove iniziare.

Avvia il processo del tuo nodo con il flag –inspect .

node --inspect index.js

e quindi apri chrome://inspect in chrome. Fare clic sul collegamento “Apri DevTools dedicato per nodo” o installare questa estensione per Chrome per aprire facilmente DevTools chrome.

Per maggiori informazioni fai riferimento a questo link

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

Emette messaggi di log con timestamp, nome del file, nome del metodo, numero di riga, percorso o stack di chiamate, supporto della console dei colors e supporto del database, dei file, del trasporto in streaming facilmente. Io sono l’autore.

Supponendo che sul tuo computer sia installato ispettore dei nodes (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).

Solo per completezza:

PyCharm 3.0 + Node.js Plugin offre una fantastica esperienza di sviluppo + esecuzione + debug .

Usa Webstorm! È perfetto per il debug di applicazioni Node.js. Ha un debugger integrato. Dai un’occhiata ai documenti qui: https://www.jetbrains.com/help/webstorm/2016.1/running-and-debugging-node-js.html

C’è il nuovo progetto Nodeclipse open-source (come plugin Eclipse o Enide Studio ):

http://www.nodeclipse.org/img/Nodeclipse-1-debugging.png

Nodeclipse è diventato il numero 1 in Eclipse Top 10 nuovi plugin per il 2013 . Utilizza un debugger V8 modificato (da Google Chrome Developer Tools per Java).

Nodeclipse è un software open source gratuito rilasciato all’inizio di ogni mese .

IntelliJ funziona meravigliosamente per Node.js.

Inoltre, IntelliJ supporta “Code Assistance”.

Ci sono molte possibilità …

  • nodo include un’utilità di debug
  • node-ispettore
  • Editor di codice / IDE (vedere le istruzioni di debug per uno dei seguenti)
    • Atomo ,
    • VSCode
    • WebStorm
    • e altro ancora

Il supporto per il debug viene spesso implementato utilizzando il protocollo di debug v8 o il protocollo di debug di Chrome più recente.

Utilizzo di Chrome versione 67.0.3396.62 (+)

  1. Esegui app nodo

node –inspect = 0.0.0.0: 9229 server.js

  1. Apri DevTools.
  2. Fare clic sull’icona del nodo accanto all’icona del dispositivo reattivo.

inserisci la descrizione dell'immagine qui

Ci sarà un’altra finestra DevTools che apparirà in modo specifico per l’applicazione di debug del nodo.

inserisci la descrizione dell'immagine qui

Un modo rapido e sporco per eseguire il debug di piccoli script Node.js con il tuo browser debugger preferito sarebbe utilizzare 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 tue var x = requires('x') chiamate in un file requires.js ed esegui:

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

(Il lato negativo qui è che devi spostare o commentare le requires in tutti i tuoi file.)

Includi bundle.js in un file HTML in questo modo:

  

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

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

<...>

Caratteristiche salienti della nuova funzione

Sviluppo di applicazioni Node.js

  • Nuova procedura guidata del 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 di applicazioni Node.js.

<...>

Ulteriori riferimenti:

  1. NetBeans Wiki / NewAndNoteworthyNB81 .
  2. Node.js Express App in NetBeans IDE, Geertjan-Oracle .
 node-debug -p 8888 scriptFileName.js 

Vorrei usare GOOD da parte di Walmart Labs. Farà il lavoro, ed è molto flessibile:

 var hapi = require('hapi'); var good = require('good'); var server = hapi.createServer('localhost', 5000,{}); server.route({SOME ROUTE HERE}); server.start(); var options = { subscribers: { 'console': ['ops', 'request', 'log', 'error'], 'http://localhost/logs': ['log'] } }; server.pack.require('good', options, function (err) { if (!err) { console.log('Plugin loaded successfully'); } });