depurar
Una petita utilitat de depuració de JavaScript basada en la tècnica de depuració del nucli de Node.js. Funciona amb Node.js i navegadors web.
Instal·lació
1$ npm install debug
Ús
debug
exposa una funció; només cal que passeu a aquesta funció el nom del vostre mòdul i us retornarà una versió decorada per console.error
a què us passiu les declaracions de depuració. Això us permetrà canviar la sortida de depuració per a diferents parts del vostre mòdul, així com el mòdul. com un tot.
Exemple 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');
Exemple worker.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();
Aleshores, la DEBUG
variable d'entorn s'utilitza per habilitar-les en funció d'espais o noms delimitats per comes.
Aquests són alguns exemples:
Nota de Windows
A Windows, la variable d'entorn s'estableix mitjançant l' set
ordre.
1set DEBUG=*,-not_this
Tingueu en compte que PowerShell utilitza una sintaxi diferent per establir variables d'entorn.
1$env:DEBUG = "*,-not_this"
A continuació, executeu el programa que s'ha de depurar com de costum.
Colors de l'espai de noms
Cada instància de depuració té un color generat en funció del nom del seu espai de noms. Això ajuda a l'anàlisi visual de la sortida de depuració per identificar a quina instància de depuració pertany una línia de depuració.
Node.js
A Node.js, els colors s'activen quan stderr és un TTY. També hauríeu d' instal·lar el supports-color
mòdul juntament amb Debug, en cas contrari, Debug només utilitzarà un petit grapat de colors bàsics.
Navegador web
Els colors també estan activats als "Inspectors web" que entenen l' %c
opció de format. Aquests són els inspectors web de WebKit, Firefox ( des de la versió 31 ) i el connector Firebug per a Firefox (qualsevol versió).
Diferència de mil·lisegons
Quan es desenvolupa activament una aplicació, pot ser útil veure quan el temps passat entre una debug()
trucada i la següent. Suposem, per exemple, que invoqueu debug()
abans de sol·licitar un recurs, i després també, el "+NNNms" us mostrarà quant de temps s'ha dedicat. entre trucades.
Quan stdout no és un TTY, Date#toISOString()
s'utilitza, el que fa que sigui més útil per registrar la informació de depuració com es mostra a continuació:
Convencions
Si utilitzeu això en una o més de les vostres biblioteques, hauríeu d' utilitzar el nom de la vostra biblioteca perquè els desenvolupadors puguin alternar la depuració com vulgueu sense endevinar els noms. Si teniu més d'un depurador, hauríeu de prefixar -los amb el nom de la biblioteca i utilitzeu ":" per separar les funcions. Per exemple, "bodyParser" de Connect seria "connect:bodyParser". Si afegiu un "*" al final del vostre nom, sempre estarà habilitat independentment de la configuració de DEBUG variable d'entorn. A continuació, podeu utilitzar-la per a la sortida normal així com per a la sortida de depuració.
Comodins
El *
caràcter es pot utilitzar com a comodí. Suposem, per exemple, que la vostra biblioteca té depuradors anomenats "connect:bodyParser", "connect:compress", "connect:session", en lloc d'enumerar els tres amb , simplement
DEBUG=connect:bodyParser,connect:compress,connect:session
podeu fer
DEBUG=connect:*
, o executar tot el que utilitzeu aquest mòdul simplement feu servir DEBUG=*
.
També podeu excloure depuradors específics prefixant-los amb un caràcter "-". Per exemple, DEBUG=*,-connect:*
inclouria tots els depuradors excepte els que comencen per "connectar:".
Variables del mediambient
Quan feu servir Node.js, podeu establir unes quantes variables d'entorn que canviaran el comportament del registre de depuració:
Nom | Propòsit |
---|---|
DEBUG |
Activa/desactiva espais de noms de depuració específics. |
DEBUG_HIDE_DATE |
Amaga la data de la sortida de depuració (no TTY). |
DEBUG_COLORS |
Si s'utilitzen o no colors a la sortida de depuració. |
DEBUG_DEPTH |
Profunditat d'inspecció d'objectes. |
DEBUG_SHOW_HIDDEN |
Mostra les propietats ocultes dels objectes inspeccionats. |
Nota: les variables d'entorn que comencen per DEBUG_
acaben convertint-se en un objecte Options que s'utilitza amb %o
/ %O
formatters. Consulteu la documentació de Node.js per
util.inspect()
obtenir la llista completa.
Formatters
Debug utilitza un format d'estil printf . A continuació es mostren els formatadors admesos oficialment:
Formatador | Representació |
---|---|
%O |
Imprimeix força un objecte en diverses línies. |
%o |
Imprimeix força un objecte tot en una sola línia. |
%s |
Corda. |
%d |
Nombre (tant enter com flotant). |
%j |
JSON. S'ha substituït per la cadena "[Circular]" si l'argument conté referències circulars. |
%% |
Signe de percentatge únic ('%'). Això no consumeix cap argument. |
Custom formatters
Podeu afegir formatadors personalitzats ampliant l' debug.formatters
objecte. Per exemple, si voleu afegir suport per a la representació d'un buffer com a hexadecimal amb
%h
, podeu fer alguna cosa com:
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
Suport del navegador
Podeu crear un script preparat per al navegador mitjançant browserify , o simplement utilitzar la compilació browserify-as-a-service , si no voleu crear-lo vosaltres mateixos.
L'estat d'habilitació de la depuració es manté actualment per localStorage
. Considereu la situació que es mostra a continuació on teniu worker:a
i worker:b
, i voleu depurar tots dos. Podeu activar-ho mitjançant localStorage.debug
:
1localStorage.debug = 'worker:*'
I després actualitzeu la pàgina.
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);
Fluxos de sortida
Per defecte, debug
iniciarà sessió a stderr, però això es pot configurar per espai de noms anul·lant el log
mètode:
Exemple 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');
Estableix dinàmicament
També podeu habilitar la depuració dinàmicament cridant al enable()
mètode:
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'));
imprimir:
1
2
31 false
2 true
3 false
Ús: enable(namespaces)
namespaces
pot incloure modes separats per dos punts i comodins.
Tingueu en compte que la trucada enable()
anul·la completament la variable DEBUG establerta anteriorment:
1
2$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
=> false
Comprovació de si un objectiu de depuració està habilitat
Després d'haver creat una instància de depuració, podeu determinar si està habilitada o no marcant la enabled
propietat:
1
2
3
4
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
També podeu canviar manualment aquesta propietat per forçar que la instància de depuració estigui activada o desactivada.
Autors
- TJ Holowaychuk
- Nathan Rajlich
- Andrew Rhyne
Col·laboradors
Ajudeu-nos amb una donació mensual i ajudeu-nos a continuar amb les nostres activitats. [ Fes-te col·laborador ]
Patrocinadors
Fes-te patrocinador i aconsegueix el teu logotip al nostre LLEGEIXME a Github amb un enllaç al teu lloc. [ Fes-te patrocinador ]
llicència
(Llicència MIT)
Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>
Es concedeix permís, de manera gratuïta, a qualsevol persona que obtingui una còpia d'aquest programari i els fitxers de documentació associats (el "Programari") per tractar el Programari sense restriccions, inclosos, sense limitació, els drets d'utilitzar, copiar, modificar, combinar. , publicar, distribuir, subllicenciar i/o vendre còpies del Programari, i permetre que les persones a qui es subministra el Programari ho facin, subjecte a les condicions següents:
L'avís de drets d'autor anterior i aquest avís de permís s'inclouran a totes les còpies o parts substancials del Programari.
EL PROGRAMARI ES PROPORCIONA "TAL CUAL", SENSE GARANTIA DE CAP TIPUS, EXPLÍCITA O IMPLÍCITA, INCLOSANT, PERÒ NO LIMITAR-SE A LES GARANTIES DE COMERCIABILITAT, IDONEITAT PER A UN PROPÒSIT PARTICULAR I NO INFRACCIÓ. RECLAMACIÓ, DANYS O ALTRES RESPONSABILITATS, JA SIGUI EN UNA ACCIÓ DE CONTRACTE, DORMIR O ALTRE ALTRE, DERIVADA DEL PROGRAMARI O EN RELACIÓ AMB EL PROGRAMARI O L'ÚS O ALTRES TRATATS EN EL PROGRAMARI.