Fantastico modulo community community

eseguire il debug

Stato di costruzione Stato di copertura allentato 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 ti restituirà una versione decorata di console.errora 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 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 a spazi o nomi delimitati da virgole.

Ecco alcuni esempi:

schermata 08-08-2017 alle 12 53 04 pm schermata 08-08-2017 alle 12 53 38 pm schermata 08-08-2017 alle 12 53 25 pm

Nota di Windows

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

1
set 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-colormodulo 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 "Web Inspector" che comprendono l' %copzione di formattazione.Si tratta di Web Inspector WebKit, Firefox ( dalla versione 31 ) e il plugin 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/ %Oformattatori.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.formattersoggetto.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 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 browser 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:ae worker:b, e desideri eseguire il debug di entrambi. Puoi abilitarlo 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 uscita

Per impostazione predefinita debugsi registrerà 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');

Imposta dinamicamente

Puoi anche abilitare il debug in modo dinamico chiamando il enable()metodo:

1 2 3 4 5 6 7 8 9 10
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.

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 enabledproprietà:

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