eseguire il debug
Una piccola utility di debug JavaScript modellata sulla tecnica di debug del core di Node.js. Funziona in Node.js e nei browser web.
Installazione
1$ npm install debug
Utilizzo
debug
espone una funzione; passa semplicemente a questa funzione il nome del tuo modulo e ti restituirà una versione decorata di console.error
a cui passare le istruzioni di debug.Questo ti permetterà di alternare l'output di debug per diverse parti del tuo modulo così come il modulo nel complesso.
Esempio app.js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18var debug = require('debug')('http')
, http = require('http')
, name = 'My App';
// fake app
debug('booting %o', name);
http.createServer(function(req, res){
debug(req.method + ' ' + req.url);
res.end('hello\n');
}).listen(3000, function(){
debug('listening');
});
// fake worker of some kind
require('./worker');
Esempio lavoratore.js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var a = require('debug')('worker:a')
, b = require('debug')('worker:b');
function work() {
a('doing lots of uninteresting work');
setTimeout(work, Math.random() * 1000);
}
work();
function workb() {
b('doing some work');
setTimeout(workb, Math.random() * 2000);
}
workb();
La DEBUG
variabile di ambiente viene quindi utilizzata per abilitarli in base a spazi o nomi delimitati da virgole.
Ecco alcuni esempi:
Nota di Windows
Su Windows la variabile d'ambiente viene impostata utilizzando il set
comando.
1set DEBUG=*,-not_this
Tieni presente che PowerShell usa una sintassi diversa per impostare le variabili di ambiente.
1$env:DEBUG = "*,-not_this"
Quindi, esegui il programma per il debug come al solito.
Colori dello spazio dei nomi
Ogni istanza di debug ha un colore generato in base al nome dello spazio dei nomi.Questo aiuta quando si analizza visivamente l'output di debug per identificare a quale istanza di debug appartiene una riga di debug.
Nodo.js
In Node.js, i colori vengono attivate quando stderr è un TTY. È inoltre necessario installare il supports-color
modulo a fianco di debug, altrimenti il debug utilizza solo una piccola manciata di colori di base.
Programma di navigazione in rete
I colori sono abilitati anche su "Ispettori Web" che comprendono l' %c
opzione di formattazione.Si tratta di ispettori Web WebKit, Firefox ( dalla versione 31 ) e il plug-in Firebug per Firefox (qualsiasi versione).
Millisecondi di differenza
Quando si sviluppa attivamente un'applicazione può essere utile vedere quando è trascorso il tempo tra una debug()
chiamata e l'altra.Supponiamo ad esempio di invocare debug()
prima di richiedere una risorsa, e anche dopo, il "+NNNms" ti mostrerà quanto tempo è stato speso tra le chiamate.
Quando stdout non è un TTY, Date#toISOString()
viene utilizzato, rendendolo più utile per la registrazione delle informazioni di debug come mostrato di seguito:
Convegni
Se stai usando questo in una o più delle tue librerie, dovresti usare il nome della tua libreria in modo che gli sviluppatori possano attivare il debug come desiderato senza indovinare i nomi.Se hai più di un debugger dovresti prefiggerli con il nome della tua libreria e usa ":" per separare le funzionalità. Ad esempio "bodyParser" da Connect sarebbe quindi "connect: bodyParser". Se aggiungi un "*" alla fine del tuo nome, sarà sempre abilitato indipendentemente dall'impostazione del DEBUG variabile di ambiente È quindi possibile utilizzarlo per l'output normale e per l'output di debug.
caratteri jolly
Il *
carattere può essere usato come carattere jolly.Supponiamo per esempio che la tua libreria abbia debugger denominati "connect:bodyParser", "connect:compress", "connect:session", invece di elencare tutti e tre con
DEBUG=connect:bodyParser,connect:compress,connect:session
, puoi semplicemente fare
DEBUG=connect:*
, o eseguire tutto ciò che usa questo modulo usa semplicemente DEBUG=*
.
Puoi anche escludere debugger specifici anteponendoli con un carattere "-". Ad esempio, DEBUG=*,-connect:*
includerebbe tutti i debugger tranne quelli che iniziano con "connect:".
variabili ambientali
Quando si esegue Node.js, è possibile impostare alcune variabili di ambiente che modificheranno il comportamento della registrazione di debug:
Nome | Scopo |
---|---|
DEBUG |
Abilita/disabilita spazi dei nomi di debug specifici. |
DEBUG_HIDE_DATE |
Nascondi la data dall'output di debug (non TTY). |
DEBUG_COLORS |
Se utilizzare o meno i colori nell'output di debug. |
DEBUG_DEPTH |
Profondità di ispezione dell'oggetto. |
DEBUG_SHOW_HIDDEN |
Mostra le proprietà nascoste sugli oggetti ispezionati. |
Nota: le variabili di ambiente che iniziano con DEBUG_
finiscono per essere convertite in un oggetto Options che viene utilizzato con %o
/ %O
formattatori.Vedere la documentazione di Node.js
util.inspect()
per l'elenco completo.
Formattatori
Il debug utilizza la formattazione in stile printf . Di seguito sono riportati i formattatori ufficialmente supportati:
formattatore | Rappresentazione |
---|---|
%O |
Stampa graziosa di un oggetto su più righe. |
%o |
Pretty-stampa un oggetto tutto su una singola riga. |
%s |
Corda. |
%d |
Numero (sia intero che float). |
%j |
JSON. Sostituito con la stringa "[Circular]" se l'argomento contiene riferimenti circolari. |
%% |
Segno di percentuale singolo ('%'). Questo non consuma un argomento. |
Custom formatters
Puoi aggiungere formattatori personalizzati estendendo l' debug.formatters
oggetto.Ad esempio, se volessi aggiungere il supporto per il rendering di un Buffer come esadecimale con
%h
, potresti fare qualcosa come:
1
2
3
4
5
6
7
8
9const createDebug = require('debug')
createDebug.formatters.h = (v) => {
return v.toString('hex')
}
// …elsewhere
const debug = createDebug('foo')
debug('this is hex: %h', new Buffer('hello world'))
// foo this is hex: 68656c6c6f20776f726c6421 +0ms
Supporto browser
È possibile costruire uno script del browser-ready con browserify , o semplicemente utilizzare il browserify-as-a-service di compilazione , se non si vuole costruire da soli.
Lo stato di abilitazione del debug è attualmente mantenuto da localStorage
. Considera la situazione mostrata di seguito in cui hai worker:a
e worker:b
, e desideri eseguire il debug di entrambi. Puoi abilitarlo utilizzando localStorage.debug
:
1localStorage.debug = 'worker:*'
E poi aggiorna la pagina.
1
2
3
4
5
6
7
8
9
10a = debug('worker:a');
b = debug('worker:b');
setInterval(function(){
a('doing some work');
}, 1000);
setInterval(function(){
b('doing some work');
}, 1200);
Flussi di uscita
Per impostazione predefinita debug
si registrerà su stderr, tuttavia questo può essere configurato per spazio dei nomi sovrascrivendo il log
metodo:
Esempio stdout.js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17var debug = require('debug');
var error = debug('app:error');
// by default stderr is used
error('goes to stderr!');
var log = debug('app:log');
// set this namespace to log via console.log
log.log = console.log.bind(console); // don't forget to bind to console!
log('goes to stdout');
error('still goes to stderr!');
// set all output to go via console.info
// overrides all per-namespace log settings
debug.log = console.info.bind(console);
error('now goes to stdout via console.info');
log('still goes to stdout, but via console.info now');
Imposta dinamicamente
Puoi anche abilitare il debug in modo dinamico chiamando il enable()
metodo:
1
2
3
4
5
6
7
8
9
10let debug = require('debug');
console.log(1, debug.enabled('test'));
debug.enable('test');
console.log(2, debug.enabled('test'));
debug.disable();
console.log(3, debug.enabled('test'));
Stampa:
1
2
31 false
2 true
3 false
Utilizzo: enable(namespaces)
namespaces
può includere modalità separate da due punti e caratteri jolly.
Nota che la chiamata enable()
sovrascrive completamente la variabile DEBUG precedentemente impostata:
1
2$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
=> false
Verificare se una destinazione di debug è abilitata
Dopo aver creato un'istanza di debug, puoi determinare se è abilitata o meno controllando la enabled
proprietà:
1
2
3
4
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
Puoi anche attivare o disattivare manualmente questa proprietà per forzare l'abilitazione o la disabilitazione dell'istanza di debug.
Autori
- TJ Holowaychuk
- Nathan Rajlich
- Andrew Rhyne
Sostenitori
Sostienici con una donazione mensile e aiutaci a continuare le nostre attività. [ Diventa un sostenitore ]
sponsor
Diventa uno sponsor e ottieni il tuo logo sul nostro README su Github con un link al tuo sito. [ Diventa uno sponsor ]
Licenza
(La licenza MIT)
Copyright (c) 2014-2017 TJ Holowaychuk < tj@vision-media.ca >
Con la presente viene concessa l'autorizzazione, a titolo gratuito, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), di utilizzare il Software senza restrizioni, inclusi, senza limitazioni, i diritti di utilizzare, copiare, modificare, unire , pubblicare, distribuire, concedere in sublicenza e/o vendere copie del Software e consentire alle persone a cui viene fornito il Software di farlo, alle seguenti condizioni:
L'avviso di copyright di cui sopra e il presente avviso di autorizzazione devono essere inclusi in tutte le copie o parti sostanziali del Software.
IL SOFTWARE VIENE FORNITO "COS COM'È", SENZA ALCUN TIPO DI GARANZIA, ESPRESSA O IMPLICITA, INCLUSE MA NON LIMITATE ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UN PARTICOLARE SCOPO E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O ESSERE COPYRIGHT PER I TITOLARI DANNI O ALTRE RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, ILLECITO O ALTRO, DERIVANTI DA, DA O IN CONNESSIONE CON IL SOFTWARE O L'USO O ALTRI TRATTAMENTI NEL SOFTWARE.