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 restituirà una versione decorata di a console.error
cui puoi passare le istruzioni di debug. Ciò ti consentirà di alternare l'output di debug per diverse parti del tuo modulo così come per 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 allo spazio o ai 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 utilizza una sintassi diversa per impostare le variabili di ambiente.
1$env:DEBUG = "*,-not_this"
Quindi, esegui il programma di cui eseguire il debug come al solito.
Colori dello spazio dei nomi
Per ogni istanza di debug viene generato un colore in base al nome dello spazio dei nomi. Ciò aiuta durante l'analisi visiva dell'output di debug per identificare a quale istanza di debug appartiene una riga di debug.
Node.js
In Node.js, i colori sono abilitati quando stderr è un TTY. Dovresti anche installare il supports-color
modulo insieme a debug, altrimenti debug utilizzerà solo una piccola manciata di colori di base.
Programma di navigazione in rete
I colori sono abilitati anche sugli "ispettori web" che comprendono l' %c
opzione di formattazione: si tratta degli ispettori web WebKit, di Firefox ( dalla versione 31 ) e del plugin Firebug per Firefox (qualsiasi versione).
Differenza millisecondo
Quando si sviluppa attivamente un'applicazione può essere utile vedere quando è trascorso il tempo tra una debug()
chiamata e la successiva. Supponiamo ad esempio di invocare debug()
prima di richiedere una risorsa, e anche dopo, il "+NNNms" mostrerà quanto tempo è stato impiegato tra una chiamata e l'altra.
Quando viene utilizzato stdout non è un TTY Date#toISOString()
, rendendolo più utile per registrare le informazioni di debug come mostrato di seguito:
Convegni
Se lo stai utilizzando in una o più librerie, dovresti utilizzare il nome della libreria in modo che gli sviluppatori possano attivare/disattivare il debug come desiderato senza indovinare i nomi. Se hai più di un debugger dovresti prefissarli con il nome della libreria e utilizzare ":" per separare le funzionalità. Ad esempio "bodyParser" da Connect sarà "connect:bodyParser". Se aggiungi un "*" alla fine del tuo nome, sarà sempre abilitato indipendentemente dall'impostazione del DEBUG variabile di ambiente. Puoi quindi usarlo per l'output normale e per l'output di debug.
Caratteri jolly
Il *
carattere può essere utilizzato come carattere jolly. Supponiamo ad esempio che la tua libreria abbia debugger denominati "connect:bodyParser", "connect:compress", "connect:session", invece di elencarli tutti e tre con ,
DEBUG=connect:bodyParser,connect:compress,connect:session
puoi semplicemente fare
DEBUG=connect:*
, o eseguire tutto ciò che utilizza questo modulo utilizza semplicemente DEBUG=*
.
Puoi anche escludere debugger specifici prefissandoli con un carattere "-". Ad esempio, DEBUG=*,-connect:*
includerebbe tutti i debugger tranne quelli che iniziano con "connect:".
variabili ambientali
Quando esegui Node.js, puoi impostare alcune variabili di ambiente che modificheranno il comportamento della registrazione del 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 Opzioni che viene utilizzato con i formattatori %o
/ %O
. Consulta la documentazione di Node.js per
util.inspect()
l'elenco completo.
Formattatori
Il debug utilizza la formattazione in stile printf . Di seguito sono riportati i formattatori ufficialmente supportati:
Formattatore | Rappresentazione |
---|---|
%O |
Stampa in modo grazioso un oggetto su più righe. |
%o |
Stampa in modo grazioso un oggetto tutto su un'unica 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 utilizza un argomento. |
Custom formatters
Puoi aggiungere formattatori personalizzati estendendo l' debug.formatters
oggetto. Ad esempio, se desideri aggiungere il supporto per il rendering di un Buffer come esadecimale con
%h
, potresti fare qualcosa del tipo:
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 del browser
Puoi creare uno script pronto per il browser utilizzando browserify o semplicemente utilizzare la build browserify-as-a-service , se non vuoi crearlo tu stesso.
Lo stato di attivazione 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 abilitare questo 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 output
Per impostazione predefinita debug
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');
Impostato in modo dinamico
Puoi anche abilitare il debug dinamicamente chiamando il enable()
metodo:
1
2
3
4
5
6
7
8
9let 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.
Tieni presente 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
Verifica 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 manualmente questa proprietà per forzare l'abilitazione o la disabilitazione dell'istanza di debug.
Autori
- TJ Holowaychuk
- Nathan Rajlich
- Andrea Rhyne
Sostenitori
Sostienici con una donazione mensile e aiutaci a continuare le nostre attività [ Diventa sostenitore ]
Sponsor
Diventa uno sponsor e inserisci il tuo logo nel nostro README su Github con un collegamento al tuo sito. [ Diventa uno sponsor ]
Licenza
(La licenza MIT)
Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>
Con la presente viene concesso il permesso, a titolo gratuito, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il "Software"), di trattare il Software senza restrizioni, inclusi, senza limitazione, 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 sul copyright di cui sopra e il presente avviso di autorizzazione saranno inclusi in tutte le copie o parti sostanziali del Software.
IL SOFTWARE VIENE FORNITO "COSÌ COME È", SENZA GARANZIA DI ALCUN TIPO, ESPLICITA O IMPLICITA, INCLUSE MA NON LIMITATE ALLE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ PER UNO SCOPO PARTICOLARE E NON VIOLAZIONE. IN NESSUN CASO GLI AUTORI O I DETENTORI DEL COPYRIGHT SARANNO RESPONSABILI DI EVENTUALE RECLAMI, DANNI O ALTRA RESPONSABILITÀ, SIA IN UN'AZIONE CONTRATTUALE, ILLECITO O ALTRIMENTI, DERIVANTI DA, DA O IN CONNESSIONE CON IL SOFTWARE O L'USO O ALTRI RAPPORTI DEL SOFTWARE.