Debugging con Node.js

Ritengo che il debug sia una parte cruciale del ciclo di sviluppo come qualsiasi altro. Quindi è sempre buona pratica demistificare il lavoro di debugging, rendendolo più facile e meno dispendioso in termini di tempo, in modo da poter terminare il lavoro in tempo e ridurre lo stress. 

Come la maggior parte delle lingue disponibili, Node fornisce alcuni eccellenti strumenti di debug che rendono i difetti del codice facilmente individuabili e risolti. Sostengo sempre l'uso di un debugger perché personalmente trovo che usare i debugger elimina davvero la necessità di qualsiasi congettura e ci rende migliori sviluppatori in generale. 

Questa guida è per sviluppatori e amministratori che funzionano già con Node. Presume una comprensione fondamentale della lingua a livello pratico.

Utilizzando il debugger

Node.js include un'utilità di debug out-of-process completa accessibile tramite un semplice protocollo basato su TCP e un client di debug incorporato.

Ad esempio, per utilizzare il debugger per eseguire il debug di un file denominato script.js, puoi semplicemente chiamare il nodo usando il mettere a punto contrassegno in questo modo:

$ node debug script.js < debugger listening on port 5858 connecting… ok debug>

I punti di interruzione

Ora che hai avviato una sessione di debug, ovunque nello script che chiami debugger da sarà un punto di interruzione per il debugger. 

Ad esempio, aggiungiamo un'istruzione debugger a script.js:

foo = 2; setTimeout (() => debugger; console.log ('bugger');, 1000); console.log ( 'de');

Ora, se eseguiamo questo script, il debugger verrà chiamato sul nostro punto di interruzione e possiamo controllare il controllo dello script tramite il comando cont o Il prossimo comandi (c o n in breve).

Possiamo sospendere l'esecuzione dello script in qualsiasi momento usando p.

$ node debug script.js < debugger listening on port 5858 connecting… ok break in /home/tom/web/envatodebug/myscript.js:1 1 foo = 5; 2 setTimeout(() => 3 debugger; debug> cont < de break in /home/tom/web/envatodebug/myscript.js:3 1 foo = 5; 2 setTimeout(() => 3 debugger; 4 console.log ('bugger'); 5, 1000); debug> prossima interruzione in /home/tom/web/envatodebug/myscript.js:4 2 setTimeout (() => 3 debugger; 4 console.log ('bugger'); 5, 1000); 6 console.log ('de'); debug> successivo < bugger break in /home/tom/web/envatodebug/myscript.js:5 3 debugger; 4 console.log('bugger'); 5 , 1000); 6 console.log('de'); 7 debug> smettere

REPL

$ node debug script.js < debugger listening on port 5858 connecting… ok debug> repl Premere Ctrl + C per lasciare il debug repl> foo 2> 2 + 2 4

Il Read-Eval-Print-Loop del debugger consente di immettere codice in modo interattivo durante l'esecuzione e quindi di accedere allo stato dell'applicazione e a tutte le sue variabili e metodi al punto di interruzione dell'esecuzione. Questo è uno strumento molto potente che puoi usare per disinfettare rapidamente la tua app.

In generale, REPL è disponibile come indipendente e come parte del debugger e consente di eseguire JavaScript in modo interattivo. Ad esempio, digita semplicemente nodo al prompt senza opzioni e vi verrà fornita un'interfaccia REPL in cui è possibile scrivere il codice e vedere l'output.

Entrando e uscendo

Prima ho menzionato il contIl prossimo (c e n), che ci consentono di continuare l'esecuzione del codice una volta raggiunto un punto di interruzione. In aggiunta a ciò, mentre camminiamo attraverso il codice possiamo anche entrare in un metodo o uscire allo scope genitore.

Usa i comandi passo entrare e su uscire, o S e o in breve.

backtracing

Uso backtrace o bt per ottenere un'uscita del backtrace per il frame di esecuzione corrente.

ripresa

Uso ricomincia o r per riavviare lo script dall'inizio dell'esecuzione.

Modi alternativi per connettersi al debugger

Gli utenti esperti possono accedere al debugger anche avviando Node.js con --mettere a punto flag della riga di comando o, in alternativa, segnalando un processo Node.js esistente con SIGUSR1.

Una volta che un processo è stato impostato nella modalità di debug in questo modo, può essere connesso utilizzando il debugger Node.js utilizzando il pid del processo in esecuzione o tramite un riferimento URI (ad es localhost: port) per connettere il debugger di ascolto:

  • nodo debug -p  si connette al processo tramite il pid.
  • nodo di debug  si collega al processo tramite l'URI come localhost: 5858.

Utilizzando Node Inspector

Oltre allo strumento di debug CLI, Node Inspector fornisce anche un ispettore GUI all'interno del browser Web (attualmente supporta solo Chrome e Opera).

Per utilizzare il debugger, è sufficiente installare in questo modo:

npm install -g node-inspector

Ora che abbiamo installato Node inspector, possiamo eseguire il debug del nostro script.js con:

node-debug script.js

La tua shell ora mostrerà quanto segue e probabilmente aprirà il browser web all'URL se hai Chrome o Opera impostati come predefiniti sul tuo SO di sviluppo.

Node Inspector è ora disponibile da http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858 Debug 'debugger script.js' in ascolto sulla porta 5858

Nel tuo browser web, ora potrai eseguire il debug dell'applicazione in un ambiente simile al pacchetto degli strumenti per sviluppatori. L'impostazione dei punti di interruzione e il codice di visualizzazione sono ora integrati con la vista del browser. Godere!

Conclusione

Il debug non ha bisogno di essere un incubo, né ha bisogno di essere stressante. 

Impostare i punti di interruzione e passare attraverso il codice è così semplice nel nodo. È un'esperienza molto simile a Ruby, e se stai cercando di capire un'applicazione che ti è stata data, aprire l'app in modalità di debug e sospenderne l'esecuzione è un modo fantastico per imparare in tempi rapidi.