{"id":52735,"date":"2022-03-17T09:58:37","date_gmt":"2022-03-17T08:58:37","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=52735&#038;preview=true&#038;preview_id=52735"},"modified":"2023-02-02T07:51:52","modified_gmt":"2023-02-02T06:51:52","slug":"debug-node","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/debug-node\/","title":{"rendered":"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti"},"content":{"rendered":"<p><a href=\"https:\/\/kinsta.com\/it\/blog\/node-js\/\">Node.js \u00e8 un runtime JavaScript<\/a> basato sullo stesso motore V8 utilizzato nel browser Chrome di Google. \u00c8 spesso utilizzato per costruire applicazioni multipiattaforma lato server e terminale. <a href=\"https:\/\/kinsta.com\/it\/blog\/app-node-js\/\">Node.js \u00e8 diventato sempre pi\u00f9 popolare<\/a> negli ultimi dieci anni perch\u00e9 \u00e8 <a href=\"https:\/\/kinsta.com\/it\/blog\/come-installare-node-js\/\">facile da installare<\/a>, pratico da usare, veloce e permette agli sviluppatori web lato client di <a href=\"https:\/\/kinsta.com\/it\/blog\/retribuzione-sviluppatore-node-js\/\">sfruttare le proprie competenze in un posto diverso<\/a>.<\/p>\n<p>Tuttavia, lo sviluppo del software rimane un compito complesso e il codice per Node.js ad un certo punto andr\u00e0 in errore. Questo tutorial dimostra vari strumenti per aiutarvi nel debug delle applicazioni e a trovare la causa di un problema.<\/p>\n<p>Cominciamo subito.<\/p>\n<h3>Guardate la nostra video-guida al <a href=\"https:\/\/www.youtube.com\/watch?v=Kz8EB9Lhul8\">debug del codice Node.js<\/a><\/h3>\n<p class=\"p1\"><kinsta-video src=\"https:\/\/www.youtube.com\/watch?v=Kz8EB9Lhul8\"><\/kinsta-video><\/p>\n<aside role=\"note\" class=\"wp-block-kinsta-notice is-style-info\">\n            <h3>Info<\/h3>\n        <p><a href=\"https:\/\/deno.land\/\" target=\"_blank\" rel=\"noopener noreferrer\">Deno<\/a> \u00e8 un runtime JavaScript alternativo. \u00c8 simile a Node.js ma pi\u00f9 recente e risolve alcune delle crepe e delle incongruenze. Gli strumenti e le informazioni che seguono possono spesso essere applicati alle applicazioni Deno e a Node.js.<\/p>\n<\/aside>\n\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Panoramica sul Debugging<\/h2>\n<p>&#8220;Debugging&#8221; \u00e8 il nome dato ai vari mezzi di correzione dei difetti del software. Risolvere un bug \u00e8 spesso semplice. Trovare la causa del bug pu\u00f2 essere molto pi\u00f9 complesso e pu\u00f2 richiedere ore di grattacapi.<\/p>\n<p>Le seguenti sezioni descrivono tre tipi generali di errori.<\/p>\n<h3>Errori di Sintassi<\/h3>\n<p>Il codice non segue le regole del linguaggio &#8211; per esempio, quando si omette una parentesi di chiusura o si scrive male una frase, ad esempio <code>console.lag(x)<\/code>.<\/p>\n<p>Un buon editor di codice pu\u00f2 aiutare a individuare i problemi comuni:<\/p>\n<ul>\n<li>Codice a colori delle dichiarazioni valide o non valide<\/li>\n<li>Controllo del tipo delle variabili<\/li>\n<li>Completamento automatico dei nomi di funzioni e variabili<\/li>\n<li>Evidenziazione delle parentesi corrispondenti<\/li>\n<li>Auto-indentazione dei blocchi di codice<\/li>\n<li>Rilevamento del codice irraggiungibile<\/li>\n<li>Refactoring di funzioni disordinate<\/li>\n<\/ul>\n<p>Gli <a href=\"https:\/\/kinsta.com\/it\/blog\/editor-html-gratuiti\/\">editor gratuiti<\/a> come <a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">VS Code<\/a> e <a href=\"https:\/\/atom.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Atom<\/a>, hanno un ottimo supporto per Node.js, JavaScript e TypeScript (che traspila in JavaScript). I problemi di sintassi di base possono normalmente essere individuati prima di salvare e testare il codice.<\/p>\n<p>Un linter di codice come <a href=\"https:\/\/eslint.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">ESLint<\/a> segnaler\u00e0 anche errori di sintassi, cattiva indentazione e variabili non dichiarate. ESLint \u00e8 uno strumento per Node.js che potete installare globalmente:<\/p>\n<pre><code class=\"language-bash\">npm i eslint -g<\/code><\/pre>\n<p>Potete controllare i file JavaScript dalla riga di comando usando:<\/p>\n<pre><code class=\"language-bash\">eslint mycode.js<\/code><\/pre>\n<p>&#8230;ma \u00e8 pi\u00f9 facile usare un plugin per editor come <a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=dbaeumer.vscode-eslint\" target=\"_blank\" rel=\"noopener noreferrer\">ESLint per VS Code<\/a> o <a href=\"https:\/\/atom.io\/packages\/linter-eslint\" target=\"_blank\" rel=\"noopener noreferrer\">linter-eslint per Atom<\/a>, che convalidano automaticamente il codice mentre si scrive:<\/p>\n<figure id=\"attachment_115102\" aria-describedby=\"caption-attachment-115102\" style=\"width: 913px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-115102\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/eslint-vscode.png\" alt=\"ESlint in VS Code\" width=\"913\" height=\"564\"><figcaption id=\"caption-attachment-115102\" class=\"wp-caption-text\">ESlint in VS Code.<\/figcaption><\/figure>\n<h3>Errori logici<\/h3>\n<p>Il vostro codice viene eseguito ma non funziona come vi aspettate. Ad esempio, un utente non viene disconnesso quando lo richiede; un rapporto mostra cifre errate; i dati non vengono salvati completamente in un database; ecc.<\/p>\n<p>Gli errori logici possono essere causati da:<\/p>\n<ul>\n<li>Utilizzo della variabile sbagliata<\/li>\n<li>Condizioni errate, ad esempio <code>if (a &gt; 5)<\/code> piuttosto che <code>if (a &lt; 5)<\/code><\/li>\n<li>Calcoli che non tengono conto della precedenza dell&#8217;operatore, ad esempio <code>1+2*3<\/code> d\u00e0 come risultato 7 invece che 9.<\/li>\n<\/ul>\n\n<h3>Errori di Runtime (o di Esecuzione)<\/h3>\n<p>Un errore diventa evidente solo quando l&#8217;applicazione viene eseguita, il che spesso porta ad un crash. Gli errori di runtime potrebbero essere generati dalle seguenti cause:<\/p>\n<ul>\n<li>Dividere per una variabile che \u00e8 stata impostata a zero<\/li>\n<li>Tentare di accedere ad un elemento di un array che non esiste<\/li>\n<li>Cercare di scrivere in un file di sola lettura<\/li>\n<\/ul>\n<p>Gli errori di logica e di runtime sono pi\u00f9 difficili da individuare, anche se le seguenti tecniche di sviluppo possono aiutare:<\/p>\n<ol>\n<li><strong>Test-Driven Development:<\/strong> il TTD vi incoraggia a scrivere dei test prima che una funzione venga sviluppata, ad esempio X viene restituito dalla funzione Y quando Z viene passato come parametro. Questi test vengono eseguiti durante lo sviluppo iniziale e i successivi aggiornamenti per assicurarsi che il codice continui a funzionare come previsto.<\/li>\n<li><strong>Usare un sistema di tracciamento dei problemi: <\/strong>non c&#8217;\u00e8 niente di peggio di un&#8217;email che dice <i>&#8220;Il tuo software non funziona&#8221;<\/i>! I sistemi di tracciamento dei problemi permettono di registrare problemi specifici, documentare i passi di riproduzione, stabilire le priorit\u00e0, assegnare gli sviluppatori e tracciare il progresso delle correzioni.<\/li>\n<li><strong>Usare il controllo dei sorgenti: <\/strong>un sistema di controllo dei sorgenti <a href=\"https:\/\/kinsta.com\/it\/blog\/git-contro-github\/\">come Git<\/a> vi aiuter\u00e0 a fare il backup del codice, gestire le revisioni e identificare il punto in cui \u00e8 stato introdotto un bug. I repository online, compresi <a href=\"https:\/\/kinsta.com\/it\/blog\/cosa-e-github\/\">Github<\/a> e <a href=\"https:\/\/kinsta.com\/it\/blog\/bitbucket-e-github\/\">Bitbucket,<\/a> forniscono spazio e strumenti gratuiti per progetti pi\u00f9 piccoli o open-source.<\/li>\n<\/ol>\n<p>Incontrerete altri bug di Node.js, ma le sezioni che seguono descrivono i metodi per individuare errori sfuggenti.<\/p>\n<h2>Impostare le Opportune Variabili d&#8217;Ambiente di Node.js<\/h2>\n<p>Le variabili d&#8217;ambiente impostate nel sistema operativo host possono controllare le impostazioni dell&#8217;applicazione e del modulo Node.js. La pi\u00f9 comune \u00e8 <code>NODE_ENV<\/code>, che di solito \u00e8 impostata su development quando si esegue il debug e production quando si esegue su un server live. \u00c8 possibile impostare le variabili d&#8217;ambiente su macOS o Linux con il <a href=\"https:\/\/kinsta.com\/it\/blog\/comandi-linux\/\">comando<\/a>:<\/p>\n<pre><code class=\"language-js\">NODE_ENV=development<\/code><\/pre>\n<p>o al (classico) prompt dei comandi di Windows:<\/p>\n<pre><code class=\"language-js\">set NODE_ENV=development<\/code><\/pre>\n<p>oppure Windows Powershell:<\/p>\n<pre><code class=\"language-js\">$env:NODE_ENV=\"development\"<\/code><\/pre>\n<p>Nel popolare <a href=\"http:\/\/expressjs.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">framework Express.js<\/a>, l&#8217;impostazione di NODE_ENV su development disabilita la cache dei template file e produce messaggi di errore descrittivi, che potrebbero essere utili durante il debug. Altri moduli possono offrire funzioni simili e potete aggiungere una condizione NODE_ENV alle vostre applicazioni, ad es.<\/p>\n<pre><code class=\"language-js\">\/\/ running in development mode?\nconst devMode = (process.env.NODE_ENV !== 'production');\n\nif (devMode) {\n  console.log('application is running in development mode');\n}\n<\/code><\/pre>\n<p>Potete anche utilizzare il metodo <a href=\"https:\/\/nodejs.org\/api\/util.html#utildebuglogsection-callback\" target=\"_blank\" rel=\"noopener noreferrer\">util.debuglog<\/a> di Node per emettere in modo condizionato messaggi di errore, ad es.<\/p>\n<pre><code class=\"language-js\">import { debuglog } from 'util';\nconst myappDebug = debuglog('myapp');\nmyappDebug('log something');\n<\/code><\/pre>\n<p>Questa applicazione mostrer\u00e0 il messaggio di log solo quando NODE_DEBUG \u00e8 impostato su myapp o su un carattere jolly come * o my*.<\/p>\n<h2>Utilizzare le Opzioni della Riga di Comando di Node.js<\/h2>\n<p>Gli script di Node sono normalmente lanciati con node seguito dal nome dello script di ingresso:<\/p>\n<pre><code class=\"language-js\">node app.js<\/code><\/pre>\n<p>Potete anche impostare le <a href=\"https:\/\/nodejs.org\/api\/cli.html\" target=\"_blank\" rel=\"noopener noreferrer\">opzioni della riga di comando<\/a> per controllare vari aspetti del runtime. I flag utili per il debug includono:<\/p>\n<ul>\n<li><code>--check<\/code><br \/>\ncontrolla la sintassi dello script senza eseguire<\/li>\n<li><code>--trace-warnings<\/code><br \/>\nproduce uno stack trace quando le Promesse JavaScript non si risolvono o si rifiutano<\/li>\n<li><code>--enable-source-maps<\/code><br \/>\nmostra le mappe dei sorgenti quando si usa un transpiler come TypeScript<\/li>\n<li><code>--throw-deprecation<\/code><br \/>\navvisa quando vengono utilizzate funzioni deprecate di Node.js<\/li>\n<li><code>--redirect-warnings=file<\/code><br \/>\ninvia gli avvisi in uscita su un file invece che su stderr<\/li>\n<li><code>--trace-exit<\/code><br \/>\nmostra una traccia dello stack quando viene invocato <code>process.exit()<\/code>.<\/li>\n<\/ul>\n<h2>Messaggi in Uscita sulla Console<\/h2>\n<p>Emettere un messaggio nella console \u00e8 uno dei modi pi\u00f9 semplici per eseguire il debug di un&#8217;applicazione Node.js:<\/p>\n<pre><code class=\"language-js\">console.log(`someVariable: ${ someVariable }`);<\/code><\/pre>\n<p>Pochi sviluppatori si rendono conto che ci sono molti altri metodi di console:<\/p>\n<div class=\"responsive-table\">\n<table>\n<thead>\n<tr>\n<th>Metodo Console<\/th>\n<th>Descrizione<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>.log(msg)<\/code><\/td>\n<td>messaggio standard della console<\/td>\n<\/tr>\n<tr>\n<td><code>.log('%j', obj)<\/code><\/td>\n<td>output dell&#8217;oggetto come stringa JSON compatta<\/td>\n<\/tr>\n<tr>\n<td><code>.dir(obj, opt)<\/code><\/td>\n<td>propriet\u00e0 dell&#8217;oggetto pretty-print<\/td>\n<\/tr>\n<tr>\n<td><code>.table(obj)<\/code><\/td>\n<td>output di array e oggetti in formato tabellare<\/td>\n<\/tr>\n<tr>\n<td><code>.error(msg)<\/code><\/td>\n<td>un messaggio di errore<\/td>\n<\/tr>\n<tr>\n<td><code>.count(label)<\/code><\/td>\n<td>incrementa un contatore invocato e visualizza l&#8217;output<\/td>\n<\/tr>\n<tr>\n<td><code>.countReset(label)<\/code><\/td>\n<td>resetta un contatore nominato<\/td>\n<\/tr>\n<tr>\n<td><code>.group(label)<\/code><\/td>\n<td>indenta un gruppo di messaggi<\/td>\n<\/tr>\n<tr>\n<td><code>.groupEnd(label)<\/code><\/td>\n<td>termina un gruppo<\/td>\n<\/tr>\n<tr>\n<td><code>.time(label)<\/code><\/td>\n<td>avvia un timer nominato<\/td>\n<\/tr>\n<tr>\n<td><code>.timeLog(label)<\/code><\/td>\n<td>riporta il tempo trascorso<\/td>\n<\/tr>\n<tr>\n<td><code>.timeEnd(label)<\/code><\/td>\n<td>ferma un timer nominato<\/td>\n<\/tr>\n<tr>\n<td><code>.trace()<\/code><\/td>\n<td>produce una traccia dello stack (un elenco di tutte le chiamate di funzione effettuate)<\/td>\n<\/tr>\n<tr>\n<td><code>.clear()<\/code><\/td>\n<td>ripulisce la console<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><code>console.log()<\/code> accetta anche un elenco di valori separati da virgole:<\/p>\n<pre><code class=\"language-js\">let x = 123;\nconsole.log('x:', x);\n\/\/ x: 123\n<\/code><\/pre>\n<p>&#8230;anche se la destrutturazione ES6 offre un risultato simile con meno sforzo:<\/p>\n<pre><code class=\"language-js\">console.log({ x });\n\/\/ { x: 123 }\n<\/code><\/pre>\n<p>Il comando <strong>console.dir()<\/strong> stampa le propriet\u00e0 degli oggetti allo stesso modo di <a href=\"https:\/\/nodejs.org\/api\/util.html#utilinspectobject-options\" target=\"_blank\" rel=\"noopener noreferrer\">util.inspect()<\/a>:<\/p>\n<pre><code class=\"language-js\">console.dir(myObject, { depth: null, color: true });<\/code><\/pre>\n<h3>La Controversia della Console<\/h3>\n<p>Alcuni sviluppatori sostengono che <i>non<\/i> si dovrebbe <i>mai<\/i> usare <code>console.log()<\/code> perch\u00e9:<\/p>\n<ul>\n<li>State modificando il codice e potreste alterare qualcosa o dimenticare di rimuoverlo e<\/li>\n<li>Non c&#8217;\u00e8 bisogno quando ci sono opzioni di debug migliori.<\/li>\n<\/ul>\n<p>Non credete a chi dice di non usare mai <code>console.log()<\/code>! La registrazione \u00e8 veloce e sporca, ma ad un certo punto la usano tutti. Usate qualsiasi strumento o tecnica preferite. Risolvere un bug \u00e8 pi\u00f9 importante del metodo che adottate per trovarlo.<\/p>\n<h2>Utilizzare un Sistema di Registrazione di Terze Parti<\/h2>\n<p>I sistemi di registrazione di terze parti forniscono funzioni pi\u00f9 sofisticate come i livelli di messaggistica, la verbosit\u00e0, l&#8217;ordinamento, l&#8217;output di file, la profilazione, il reporting e altro. Le soluzioni pi\u00f9 popolari includono <a href=\"https:\/\/www.npmjs.com\/package\/cabin\" target=\"_blank\" rel=\"noopener noreferrer\">cabin<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/loglevel\" target=\"_blank\" rel=\"noopener noreferrer\">loglevel<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/morgan\" target=\"_blank\" rel=\"noopener noreferrer\">morgan<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/pino\" target=\"_blank\" rel=\"noopener noreferrer\">pino<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/signale\" target=\"_blank\" rel=\"noopener noreferrer\">signale<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/storyboard\" target=\"_blank\" rel=\"noopener noreferrer\">storyboard<\/a>, <a href=\"https:\/\/www.npmjs.com\/package\/tracer\" target=\"_blank\" rel=\"noopener noreferrer\">tracer<\/a> e <a href=\"https:\/\/www.npmjs.com\/package\/winston\" target=\"_blank\" rel=\"noopener noreferrer\">winston<\/a>.<\/p>\n<h2>Utilizzare l&#8217;Inspector V8<\/h2>\n<p>Il motore JavaScript V8 fornisce un <a href=\"https:\/\/nodejs.org\/api\/debugger.html\" target=\"_blank\" rel=\"noopener noreferrer\">client di debug<\/a> che potete utilizzare in Node.js. Avviate un&#8217;applicazione utilizzando node inspect, ad es.<\/p>\n<pre><code class=\"language-js\">node inspect app.js<\/code><\/pre>\n<p>Il debugger si ferma alla prima riga e mostra un prompt debug&gt;:<\/p>\n<pre><code class=\"language-js\">$ node inspect .\\mycode.js\n&lt; Debugger listening on ws:\/\/127.0.0.1:9229\/143e23fb\n&lt; For help, see: https:\/\/nodejs.org\/en\/docs\/inspector\n&lt;\n ok\n&lt; Debugger attached.\n&lt;\nBreak on start in mycode.js:1\n&gt; 1 const count = 10;\n  2\n  3 for (i = 0; i &lt; counter; i++) {\ndebug&gt;\n<\/code><\/pre>\n<p>Inserite help per visualizzare un elenco di comandi. Potete fare un passo avanti nell&#8217;applicazione inserendo:<\/p>\n<ul>\n<li><strong>cont<\/strong> o <strong>c<\/strong>: continua l&#8217;esecuzione<\/li>\n<li><strong>next<\/strong> o <strong>n<\/strong>: esegue il comando successivo<\/li>\n<li><strong>step<\/strong> o <strong>s<\/strong>: entra in una funzione da invocare<\/li>\n<li><strong>out<\/strong> o <strong>o<\/strong>: esce da una funzione e ritorna all&#8217;istruzione chiamante<\/li>\n<li><strong>pause<\/strong>: mette in pausa il codice in esecuzione<\/li>\n<li><strong>watch(&#8216;myvar&#8217;)<\/strong>: controlla una variabile<\/li>\n<li><strong>setBreakPoint()<\/strong> o <strong>sb()<\/strong>: imposta un punto di interruzione<\/li>\n<li><strong>restart<\/strong>: riavvia lo script<\/li>\n<li><strong>.exit<\/strong> o <strong>Ctrl | Cmd + D<\/strong>: esce dal debugger<\/li>\n<\/ul>\n<p>Certo, questa soluzione di debug \u00e8 lunga e ingombrante. Usatela solo quando non avete altre opzioni, come quando state eseguendo del codice su un server remoto e non potete connettervi da un&#8217;altra parte o installare software aggiuntivo.<\/p>\n<h2>Utilizzare il Browser Chrome per il Debug del Codice di Node.js<\/h2>\n<p>L&#8217;opzione Node.js inspect descritta sopra avvia un server Web Socket che ascolta sulla porta localhost 9229. Avvia anche un client di debug basato sul testo, ma \u00e8 possibile utilizzare client grafici &#8211; come <a href=\"https:\/\/kinsta.com\/it\/blog\/ispeziona-elemento\/\">quello integrato in Google Chrome e nei browser basati su Chrome<\/a> come Chromium, Edge, Opera, Vivaldi e <a href=\"https:\/\/kinsta.com\/it\/blog\/recensione-brave-browser\/\">Brave<\/a>.<\/p>\n<p>Per eseguire il debug di una tipica applicazione web, avviatela con l&#8217;opzione &#8211;inspect per abilitare il server Web Socket del debugger V8:<\/p>\n<pre><code class=\"language-js\">node --inspect index.js<\/code><\/pre>\n<p>Nota:<\/p>\n<ul>\n<li>si presume che index.js sia lo script di ingresso dell&#8217;applicazione.<\/li>\n<li>Assicuratevi di utilizzare <code>--inspect<\/code> con i doppi trattini per non avviare il client del debugger basato sul testo.<\/li>\n<li>Potete usare <a href=\"https:\/\/nodemon.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">nodemon<\/a> invece di node se volete riavviare automaticamente l&#8217;applicazione quando un file viene cambiato.<\/li>\n<\/ul>\n<p>Di default, il debugger accetta solo connessioni in entrata dalla macchina locale. Se state eseguendo l&#8217;applicazione su un altro dispositivo, macchina virtuale o container Docker, usate:<\/p>\n<pre><code class=\"language-js\">node --inspect=0.0.0.0:9229 index.js<\/code><\/pre>\n<figure id=\"attachment_115105\" aria-describedby=\"caption-attachment-115105\" style=\"width: 907px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115105 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/node-inspect.png\" alt=\"node inspect\" width=\"907\" height=\"339\"><figcaption id=\"caption-attachment-115105\" class=\"wp-caption-text\">node inspect<\/figcaption><\/figure>\n<p>Potete anche usare <code>--inspect-brk<\/code> invece di <code>--inspect<\/code> per fermare l&#8217;elaborazione (impostare un punto di interruzione) sulla prima linea in modo da poter scorrere il codice dall&#8217;inizio.<\/p>\n<p>Aprite un browser basato su Chrome e inserite <code>chrome:\/\/inspect<\/code> nella barra degli indirizzi per visualizzare i dispositivi locali e in rete:<\/p>\n<figure id=\"attachment_115106\" aria-describedby=\"caption-attachment-115106\" style=\"width: 911px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115106 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-inspect.png\" alt=\"Strumento di ispezione di Chrome.\" width=\"911\" height=\"409\"><figcaption id=\"caption-attachment-115106\" class=\"wp-caption-text\">Strumento di ispezione di Chrome.<\/figcaption><\/figure>\n<p>Se la vostra applicazione Node.js non appare come <strong>Destinazione remota<\/strong>:<\/p>\n<ul>\n<li>Cliccate su Open dedicated DevTools per Node e scegliete l&#8217;indirizzo e la porta, oppure<\/li>\n<li>Spuntate <strong>Discover network targets<\/strong>, cliccate su <strong>Configure<\/strong>, poi aggiungete l&#8217;indirizzo IP e la porta del dispositivo dove sta girando.<\/li>\n<\/ul>\n<p>Cliccate sul link <strong>Inspect<\/strong> del Target per lanciare il client debugger DevTools. Questo dovrebbe essere familiare a chiunque abbia utilizzato DevTools per il debug del codice lato client:<\/p>\n<figure id=\"attachment_115107\" aria-describedby=\"caption-attachment-115107\" style=\"width: 920px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-115107\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-devtools.png\" alt=\"Chrome DevTools\" width=\"920\" height=\"550\"><figcaption id=\"caption-attachment-115107\" class=\"wp-caption-text\">Chrome DevTools.<\/figcaption><\/figure>\n<p>Passate al pannello <strong>Sources<\/strong>. Potete aprire qualsiasi file premendo Cmd | Ctrl + P e inserendo il nome del file (come index.js).<\/p>\n<p>Tuttavia, \u00e8 pi\u00f9 facile aggiungere la cartella del progetto all&#8217;area di lavoro. Questo vi permette di caricare, modificare e salvare i file direttamente da DevTools (se pensate che sia una buona idea \u00e8 un&#8217;altra questione!)<\/p>\n<ol>\n<li>Clicca <strong>+ Add folder to workspace<\/strong><\/li>\n<li>Seleziona la posizione del progetto Node.js<\/li>\n<li>Premete <strong>Agree<\/strong> per permettere le modifiche ai file<\/li>\n<\/ol>\n<p>Ora potete caricare i file dall&#8217;albero delle cartelle di sinistra:<\/p>\n<figure id=\"attachment_115113\" aria-describedby=\"caption-attachment-115113\" style=\"width: 1167px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115113 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-sources-2.png\" alt=\"Pannello Sources di Chrome DevTools.\" width=\"1167\" height=\"843\"><figcaption id=\"caption-attachment-115113\" class=\"wp-caption-text\">Pannello Sources di Chrome DevTools.<\/figcaption><\/figure>\n<p>Cliccate su qualsiasi numero di riga per impostare un punto di interruzione denotato da un marcatore blu.<\/p>\n<p>Il debug si basa sui <i>punti di interruzione<\/i>. Questi specificano dove il debugger deve mettere in pausa l&#8217;esecuzione del programma e mostrare lo stato attuale (variabili, stack delle chiamate, ecc.)<\/p>\n<p>Nell&#8217;interfaccia utente, potete definire un numero arbitrario di punti di interruzione. Un&#8217;altra opzione \u00e8 quella di inserire un&#8217;istruzione debugger nel vostro codice, che si ferma quando un debugger \u00e8 collegato.<\/p>\n<p>Caricate e utilizzate la vostra applicazione web per raggiungere l&#8217;istruzione su cui \u00e8 impostato un punto di interruzione. Nell&#8217;esempio qui, <a href=\"http:\/\/localhost:3000\" target=\"_blank\" rel=\"noopener noreferrer\">http:\/\/localhost:3000\/<\/a> \u00e8 aperto in qualsiasi browser e DevTools fermer\u00e0 l&#8217;esecuzione alla linea 44:<\/p>\n<figure id=\"attachment_115114\" aria-describedby=\"caption-attachment-115114\" style=\"width: 1167px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115114 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-breakpoint.png\" alt=\"Breakpoint di Chrome.\" width=\"1167\" height=\"843\"><figcaption id=\"caption-attachment-115114\" class=\"wp-caption-text\">Breakpoint di Chrome.<\/figcaption><\/figure>\n<p>Il pannello di destra mostra:<\/p>\n<ul>\n<li>Una fila di icone di azioni (vedi sotto).<\/li>\n<li>Un riquadro <strong>Watch<\/strong> permette di monitorare le variabili cliccando sull&#8217;icona <strong>+<\/strong> e inserendo i rispettivi nomi.<\/li>\n<li>Un riquadro <strong>Breakpoints<\/strong> mostra un elenco di tutti i punti di interruzione e permette di abilitarli o disabilitarli.<\/li>\n<li>Un riquadro <strong>Scope<\/strong> mostra lo stato di tutte le variabili locali, del modulo e globali. Controllerete questo riquadro molto spesso.<\/li>\n<li>Un pannello <strong>Call Stack<\/strong> mostra la gerarchia delle funzioni chiamate per raggiungere questo punto.<\/li>\n<\/ul>\n<p>Una fila di icone di azioni \u00e8 mostrata sopra <strong>Paused on breakpoint<\/strong>:<\/p>\n<figure id=\"attachment_115115\" aria-describedby=\"caption-attachment-115115\" style=\"width: 625px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115115 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-breakpoint-icons.png\" alt=\"Icone di breakpoint di Chrome.\" width=\"625\" height=\"222\"><figcaption id=\"caption-attachment-115115\" class=\"wp-caption-text\">Icone di breakpoint di Chrome.<\/figcaption><\/figure>\n<p>Da sinistra a destra, queste eseguono le seguenti azioni:<\/p>\n<ul>\n<li><strong>resume execution<\/strong>: continua l&#8217;elaborazione fino al successivo punto di interruzione<\/li>\n<li><strong>step over<\/strong>: esegue il comando successivo ma resta all&#8217;interno del blocco di codice corrente &#8211; non salta in nessuna funzione chiamata<\/li>\n<li><strong>step into<\/strong>: esegue il comando successivo e salta in qualsiasi funzione se necessario<\/li>\n<li><strong>step out<\/strong>: continua l&#8217;elaborazione fino alla fine della funzione e ritorna al comando chiamante<\/li>\n<li><strong>step<\/strong>: simile a <strong>step into<\/strong> tranne per il fatto che non salta nelle funzioni asincrone<\/li>\n<li><strong>deactivate<\/strong>: disattiva tutti i punti di interruzione<\/li>\n<li><strong>pause on exceptions<\/strong>: ferma l&#8217;elaborazione quando si verifica un errore.<\/li>\n<\/ul>\n<h2>Breakpoint Condizionali<\/h2>\n<p>A volte \u00e8 necessario esercitare un maggiore controllo sui punti di interruzione. Immaginate di avere un ciclo che ha completato 1.000 iterazioni, ma siete interessati solo allo stato dell&#8217;ultima iterazione:<\/p>\n<pre><code class=\"language-js\">\nfor (let i = 0; i &lt; 1000; i++) {\n  \/\/ set breakpoint here\n}\n<\/code><\/pre>\n<p>Piuttosto che cliccare su <strong>resume execution<\/strong> 999 volte, potete cliccare con il tasto destro sulla riga, scegliere <strong>Add conditional breakpoint<\/strong> e inserire una condizione come <code>i = 999<\/code>:<\/p>\n<figure id=\"attachment_115116\" aria-describedby=\"caption-attachment-115116\" style=\"width: 979px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-115116\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-breakpoint-conditional.png\" alt=\"Breakpoint condizionale in Chrome\" width=\"979\" height=\"113\"><figcaption id=\"caption-attachment-115116\" class=\"wp-caption-text\">Breakpoint condizionale in Chrome.<\/figcaption><\/figure>\n<p>Chrome mostra i breakpoint condizionali in giallo invece che in blu. In questo caso, il punto di interruzione viene attivato solo sull&#8217;ultima iterazione del ciclo.<\/p>\n<h2>Punti di Log<\/h2>\n<p>I punti di log implementano console.log() senza alcun codice! Un&#8217;espressione pu\u00f2 essere emessa quando il codice esegue qualsiasi riga, ma non ferma l&#8217;elaborazione, a differenza di un punto di interruzione.<\/p>\n<p>Per aggiungere un punto di log, cliccate con il tasto destro su qualsiasi linea, scegliete <strong>Add log point<\/strong> e inserite un&#8217;espressione, ad esempio <code>'loop counter i', i<\/code>:<\/p>\n<figure id=\"attachment_115117\" aria-describedby=\"caption-attachment-115117\" style=\"width: 977px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115117 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/chrome-logpoint.png\" alt=\"log point in Chrome.\" width=\"977\" height=\"111\"><figcaption id=\"caption-attachment-115117\" class=\"wp-caption-text\">log point in Chrome.<\/figcaption><\/figure>\n<p>Nell&#8217;esempio qui sopra, la console di DevTools emette <code>loop counter i: 0<\/code> a <code>loop counter i: 999<\/code>.<\/p>\n<h2>Utilizzare VS Code per il Debug delle Applicazioni Node.js<\/h2>\n<p><a href=\"https:\/\/code.visualstudio.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">VS Code<\/a>, o Visual Studio Code, \u00e8 un <a href=\"https:\/\/kinsta.com\/it\/blog\/migliori-editor-di-testo\/\">editor di codice<\/a> gratuito di Microsoft che \u00e8 diventato popolare tra gli <a href=\"https:\/\/kinsta.com\/it\/blog\/diventare-sviluppatore-web\/\">sviluppatori web<\/a>. L&#8217;applicazione \u00e8 disponibile per Windows, macOS e Linux ed \u00e8 sviluppata utilizzando tecnologie web nel <a href=\"https:\/\/www.electronjs.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">framework Electron<\/a>.<\/p>\n<p>VS Code supporta Node.js e ha un client di debug integrato. La maggior parte delle applicazioni possono essere sottoposte a debug senza bisogno di configurazione; l&#8217;editor avvier\u00e0 automaticamente il server e il client di debug.<\/p>\n<p>Aprite il file di partenza (come index.js), attivate il pannello <strong>Run and Debug<\/strong>, cliccate sul pulsante <strong>Run and Debug<\/strong> e scegliete l&#8217;ambiente <strong>Node.js<\/strong>. Cliccate su qualsiasi riga per attivare un punto di interruzione mostrato come un&#8217;icona a forma di cerchio rosso. Poi, aprite l&#8217;applicazione in un browser come prima. VS Code ferma l&#8217;esecuzione quando viene raggiunto il punto di interruzione:<\/p>\n<figure id=\"attachment_115119\" aria-describedby=\"caption-attachment-115119\" style=\"width: 1245px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115119 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/vscode-breakpoint.png\" alt=\"Breakpoint di VS Code.\" width=\"1245\" height=\"881\"><figcaption id=\"caption-attachment-115119\" class=\"wp-caption-text\">Breakpoint di VS Code.<\/figcaption><\/figure>\n<p>I riquadri <strong>Variables<\/strong>, <strong>Watch<\/strong>, <strong>Call Stack<\/strong> e <strong>Breakpoints<\/strong> sono simili a quelli mostrati in <a href=\"https:\/\/kinsta.com\/it\/blog\/ispeziona-elemento\/\" target=\"_blank\" rel=\"noopener noreferrer\">Chrome DevTools<\/a>. Il pannello <strong>Loaded Scripts<\/strong> mostra quali script sono stati caricati, anche se molti sono interni a Node.js.<\/p>\n<p>La barra degli strumenti con le icone delle azioni vi permette di:<\/p>\n<ul>\n<li><strong>resume execution<\/strong>: continua l&#8217;elaborazione fino al successivo punto di interruzione<\/li>\n<li><strong>step over<\/strong>: esegue il comando successivo ma rimane all&#8217;interno della funzione corrente &#8211; non salta in nessuna funzione che invoca<\/li>\n<li><strong>step into<\/strong>: esegue il successivo comando e salta in qualsiasi funzione che chiama<\/li>\n<li><strong>step out<\/strong>: continua l&#8217;elaborazione fino alla fine della funzione e ritorna al comando chiamante<\/li>\n<li><strong>restart<\/strong>: riavvia l&#8217;applicazione e il debugger<\/li>\n<li><strong>stop<\/strong>: interrompe l&#8217;applicazione e il debugger<\/li>\n<\/ul>\n<p>Come in Chrome DevTools, pome cliccare con il tasto destro del mouse su qualsiasi linea per aggiungere <strong>Conditional breakpoints<\/strong> e <strong>Log points<\/strong>.<\/p>\n<p>Per maggiori informazioni, fate riferimento a <a href=\"https:\/\/code.visualstudio.com\/docs\/introvideos\/debugging\" target=\"_blank\" rel=\"noopener noreferrer\">Debugging in Visual Studio Code<\/a>.<\/p>\n<h2>Configurazione Avanzata del Debug di VS Code<\/h2>\n<p>Pu\u00f2 essere necessaria un&#8217;ulteriore configurazione di VS Code se volete eseguire il debug del codice su un altro dispositivo, una macchina virtuale, o se hai bisogno di utilizzare opzioni di lancio alternative come nodemon.<\/p>\n<p>VS Code memorizza le configurazioni di debug in un file launch.json all&#8217;interno di una directory <code>.vscode<\/code> nel vostro progetto. Aprite il pannello <strong>Run and Debug<\/strong>, cliccate su <strong>create a launch.json file<\/strong> e scegliete l&#8217;ambiente <strong>Node.js<\/strong> per generare questo file. Viene fornita una configurazione di esempio:<\/p>\n<figure id=\"attachment_115120\" aria-describedby=\"caption-attachment-115120\" style=\"width: 1245px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115120 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/vscode-launchjson.png\" alt=\"Configurazione debugger VS Code.\" width=\"1245\" height=\"881\"><figcaption id=\"caption-attachment-115120\" class=\"wp-caption-text\">Configurazione debugger VS Code.<\/figcaption><\/figure>\n<p>Possono essere definite come oggetti nell&#8217;array <code>\"configurations\"<\/code> un numero arbitrario di impostazioni di configurazione. Cliccate su <strong>Add Configuration&#8230;<\/strong> e selezionate un&#8217;opzione appropriata.<\/p>\n<p>Una singola configurazione di Node.js pu\u00f2:<\/p>\n<ol>\n<li>Avviare un processo stesso, o<\/li>\n<li>Collegarsi ad un server Web Socket di debug, magari in esecuzione su una macchina remota o su un container Docker.<\/li>\n<\/ol>\n<p>Per esempio, per definire una configurazione di nodemon, selezionate <strong>Node.js: Nodemon Setup<\/strong> e cambiate lo script di inserimento del &#8220;program&#8221; se necessario:<\/p>\n<pre><code class=\"language-js\">{\n  \/\/ custom configuration\n  \"version\": \"0.2.0\",\n  \"configurations\": [\n    {\n      \"console\": \"integratedTerminal\",\n      \"internalConsoleOptions\": \"neverOpen\",\n      \"name\": \"nodemon\",\n      \"program\": \"${workspaceFolder}\/index.js\",\n      \"request\": \"launch\",\n      \"restart\": true,\n      \"runtimeExecutable\": \"nodemon\",\n      \"skipFiles\": [\n        \"&lt;node_internals&gt;\/**\"\n      ],\n      \"type\": \"pwa-node\"\n    }\n  ]\n}\n<\/code><\/pre>\n<p>Salvate il file <code>launch.json<\/code> e <strong>nodemon<\/strong> (il &#8220;nome&#8221; della configurazione) appare nell&#8217;elenco a discesa nella parte superiore del pannello <strong>Run and Debug<\/strong>. Cliccate sull&#8217;icona verde di esecuzione per iniziare ad utilizzare quella configurazione e lanciate l&#8217;applicazione utilizzando nodemon:<\/p>\n<figure id=\"attachment_115121\" aria-describedby=\"caption-attachment-115121\" style=\"width: 1245px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-115121 size-full\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/02\/vscode-nodemon.png\" alt=\"Debug VS Code con nodemon.\" width=\"1245\" height=\"876\"><figcaption id=\"caption-attachment-115121\" class=\"wp-caption-text\">Debug VS Code con nodemon.<\/figcaption><\/figure>\n<p>Come prima, potete aggiungere punti di interruzione, punti di interruzione condizionali e punti di log. La differenza principale \u00e8 che nodemon riavvia automaticamente il vostro server quando viene modificato un file.<\/p>\n<p>Per ulteriori informazioni, fate riferimento a <a href=\"https:\/\/code.visualstudio.com\/docs\/editor\/debugging#_launch-configurations\" target=\"_blank\" rel=\"noopener noreferrer\">VS Code Launch configurations<\/a>.<\/p>\n<p>Anche le seguenti estensioni di VS Code possono aiutarvi a eseguire il debug del codice ospitato su ambienti server remoti o isolati:<\/p>\n<ul>\n<li><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-containers\" target=\"_blank\" rel=\"noopener noreferrer\">Remote \u2014 Containers<\/a>: collega alle applicazioni in esecuzione in container Docker<\/li>\n<li><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-ssh\" target=\"_blank\" rel=\"noopener noreferrer\">Remote &#8211; SSH<\/a>: collega alle applicazioni in esecuzione su un server remoto<\/li>\n<li><a href=\"https:\/\/marketplace.visualstudio.com\/items?itemName=ms-vscode-remote.remote-wsl\" target=\"_blank\" rel=\"noopener noreferrer\">Remote &#8211; WSL<\/a>: collegati alle applicazioni in esecuzione su Windows Subsystem for Linux (WSL).<\/li>\n<\/ul>\n<h2>Altre Opzioni di Debug di Node.js<\/h2>\n<p>La <a href=\"https:\/\/nodejs.org\/en\/docs\/guides\/debugging-getting-started\/\" target=\"_blank\" rel=\"noopener noreferrer\">Node.js Debugging Guide<\/a> fornisce consigli per una serie di editor di testo e IDE, compresi Visual Studio, JetBrains WebStorm, Gitpod ed Eclipse. Atom offre <a href=\"https:\/\/atom.io\/packages\/node-debug\">un&#8217;estensione node-debug<\/a>, che integra il debugger di Chrome DevTools nell&#8217;editor.<\/p>\n<p>Una volta che la vostra applicazione \u00e8 attiva, potreste pensare di utilizzare servizi commerciali di debug come <a href=\"https:\/\/logrocket.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">LogRocket<\/a> e <a href=\"https:\/\/sentry.io\/\" target=\"_blank\" rel=\"noopener noreferrer\">Sentry.io<\/a>, che possono registrare e riprodurre gli errori del client e del server riscontrati da utenti reali.<\/p>\n\n<h2>Riepilogo<\/h2>\n<p>Storicamente, il <a href=\"https:\/\/kinsta.com\/it\/blog\/errori-in-javascript\/\">debug di JavaScript<\/a> \u00e8 stato sempre difficile, ma ci sono stati enormi progressi negli ultimi dieci anni. La scelta \u00e8 altrettanto buona &#8211; se non <i>migliore<\/i> &#8211; di quelle fornite per altri linguaggi.<\/p>\n<p>Usate qualsiasi strumento trovate pratico per individuare un problema. Non c&#8217;\u00e8 niente di male in console.log() per una rapida ricerca di bug, ma Chrome DevTools o VS Code possono essere preferibili per problemi pi\u00f9 complessi. Questi strumenti possono aiutarvi a creare codice pi\u00f9 robusto e perderete meno tempo a risolvere i bug.<\/p>\n<p><em>Su quale pratica di debugging di Node.js scommettete? Condividete le vostre considerazioni nella sezione dei commenti qui sotto!<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js \u00e8 un runtime JavaScript basato sullo stesso motore V8 utilizzato nel browser Chrome di Google. \u00c8 spesso utilizzato per costruire applicazioni multipiattaforma lato server e &#8230;<\/p>\n","protected":false},"author":188,"featured_media":52875,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[25053,67],"topic":[25918,26203],"class_list":["post-52735","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-debugging","tag-webdev","topic-framework-javascript","topic-node-js"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti<\/title>\n<meta name=\"description\" content=\"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/debug-node\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti\" \/>\n<meta property=\"og:description\" content=\"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/debug-node\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-17T08:58:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-02-02T06:51:52+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Craig Buckler\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@craigbuckler\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Craig Buckler\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/\"},\"author\":{\"name\":\"Craig Buckler\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e\"},\"headline\":\"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti\",\"datePublished\":\"2022-03-17T08:58:37+00:00\",\"dateModified\":\"2023-02-02T06:51:52+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/\"},\"wordCount\":3263,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg\",\"keywords\":[\"debugging\",\"webdev\"],\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/\",\"name\":\"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg\",\"datePublished\":\"2022-03-17T08:58:37+00:00\",\"dateModified\":\"2023-02-02T06:51:52+00:00\",\"description\":\"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/debug-node\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/debug-node\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Node.js\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/node-js\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e\",\"name\":\"Craig Buckler\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g\",\"caption\":\"Craig Buckler\"},\"description\":\"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.\",\"sameAs\":[\"https:\/\/craigbuckler.com\/\",\"https:\/\/www.linkedin.com\/in\/craigbuckler\",\"https:\/\/x.com\/craigbuckler\",\"https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ\"],\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/craigbuckler\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti","description":"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/debug-node\/","og_locale":"it_IT","og_type":"article","og_title":"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti","og_description":"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.","og_url":"https:\/\/kinsta.com\/it\/blog\/debug-node\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2022-03-17T08:58:37+00:00","article_modified_time":"2023-02-02T06:51:52+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg","type":"image\/jpeg"}],"author":"Craig Buckler","twitter_card":"summary_large_image","twitter_description":"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg","twitter_creator":"@craigbuckler","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Craig Buckler","Tempo di lettura stimato":"17 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/"},"author":{"name":"Craig Buckler","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e"},"headline":"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti","datePublished":"2022-03-17T08:58:37+00:00","dateModified":"2023-02-02T06:51:52+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/"},"wordCount":3263,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg","keywords":["debugging","webdev"],"inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/debug-node\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/","url":"https:\/\/kinsta.com\/it\/blog\/debug-node\/","name":"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg","datePublished":"2022-03-17T08:58:37+00:00","dateModified":"2023-02-02T06:51:52+00:00","description":"Questo tutorial descrive diversi strumenti per eseguire il debug delle applicazioni node e individuare le principali cause degli errori. Impara a partire dalle basi.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/debug-node\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2022\/03\/debug-node.jpeg","width":1460,"height":730,"caption":"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/debug-node\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Node.js","item":"https:\/\/kinsta.com\/it\/argomenti\/node-js\/"},{"@type":"ListItem","position":3,"name":"Come Eseguire il Debug del Codice in Node.js Con Diversi Strumenti"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/715d986404b06691ab3014e06596908e","name":"Craig Buckler","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8e76011e66720bd2e3e24e164aa6f0b2?s=96&d=mm&r=g","caption":"Craig Buckler"},"description":"Freelance UK web developer, writer, and speaker. Has been around a long time and rants about standards and performance.","sameAs":["https:\/\/craigbuckler.com\/","https:\/\/www.linkedin.com\/in\/craigbuckler","https:\/\/x.com\/craigbuckler","https:\/\/www.youtube.com\/channel\/UCQwdl5oBTWGhifS6bRGADMQ"],"url":"https:\/\/kinsta.com\/it\/blog\/author\/craigbuckler\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/52735","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/188"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=52735"}],"version-history":[{"count":12,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/52735\/revisions"}],"predecessor-version":[{"id":64579,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/52735\/revisions\/64579"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/translations\/de"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/translations\/es"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/translations\/nl"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/52735\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/52875"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=52735"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=52735"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=52735"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}