Fantastico modulo comunitario

eseguire il debug

Stato della costruzione Stato della copertura Lento OpenCollective OpenCollective

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

debugespone una funzione; passa semplicemente a questa funzione il nome del tuo modulo e restituirà una versione decorata di a console.errorcui 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 18
var 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 16
var 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 DEBUGvariabile di ambiente viene quindi utilizzata per abilitarli in base allo spazio o ai nomi delimitati da virgole.

Ecco alcuni esempi:

schermata dell'08-08-2017 alle 12:53 16:00 schermata dell'08-08-2017 alle 12:53 38:00 schermata dell'08-08-2017 alle 12:53 25:00

Nota di Windows

Su Windows la variabile d'ambiente viene impostata utilizzando il setcomando.

1
set 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-colormodulo 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' %copzione 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:sessionpuoi 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.formattersoggetto. 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 9
const 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:ae worker:b, e desideri eseguire il debug di entrambi. Puoi abilitare questo utilizzando localStorage.debug:

1
localStorage.debug = 'worker:*'

E poi aggiorna la pagina.

1 2 3 4 5 6 7 8 9 10
a = 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 debugregistrerà su stderr, tuttavia questo può essere configurato per spazio dei nomi sovrascrivendo il logmetodo:

Esempio stdout.js :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var 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 9
let 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 3
1 false 2 true 3 false

Utilizzo:
enable(namespaces)
namespacespuò 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 enabledproprietà:

1 2 3 4 5
const 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.