depurar
Una petita utilitat de depuració de JavaScript basada en la tècnica de depuració del nucli de Node.js. Funciona en Node.js i navegadors web.
Instal·lació
1$ npm install debug
Ús
debug
exposa una funció; només cal que passeu aquesta funció amb el nom del vostre mòdul i us retornarà una versió decorada console.error
per passar instruccions de depuració. Això us permetrà canviar la sortida de depuració per a diferents parts del mòdul i del 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();
A DEBUG
continuació, s'utilitza la variable d'entorn per habilitar-les basades en noms delimitats per espais o comes.
Aquests són alguns exemples:
Nota de Windows
Al 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 per depurar-lo com de costum.
Colors de l'espai de noms
Cada instància de depuració té un color que es genera en funció del nom de l'espai de noms. Això ajuda a analitzar visualment 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é heu d’ instal·lar el supports-color
mòdul al costat de la depuració; en cas contrari, la depuració només farà servir un petit grapat de colors bàsics.
Navegador web
Els colors també estan habilitats als "Inspectors web" que entenen l' %c
opció de format: són inspectors web de WebKit, Firefox ( des de la versió 31 ) i el connector Firebug per a Firefox (qualsevol versió).
Dif. Mil·lisegons
Quan es desenvolupa activament una aplicació, pot ser útil veure quan es passa el temps entre una debug()
trucada i la següent. Suposem, per exemple, que invoca debug()
abans de sol·licitar un recurs i, després, el "+ NNNms" us mostrarà quant temps es va passar entre trucades.
Quan stdout no és un TTY, Date#toISOString()
s’utilitza, cosa que el fa més útil per registrar la informació de depuració, tal 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 canviar la depuració com vulgueu sense endevinar noms. Si teniu més d'un depurador, els hauríeu de posar amb el vostre nom de 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ó del DEBUG variable d'entorn. Podeu utilitzar-la tant per a la sortida normal com per a la 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 de llistar els tres amb
DEBUG=connect:bodyParser,connect:compress,connect:session
, podeu fer-ho simplement
DEBUG=connect:*
o executar-lo tot el que fa servir aquest mòdul simplement utilitza DEBUG=*
.
També podeu excloure depuradors específics prefixant-los amb un caràcter "-". Per exemple, DEBUG=*,-connect:*
inclouria tots els depuradors excepte els que comencin per "connect:".
Variables del mediambient
Quan executeu Node.js, podeu establir algunes variables d'entorn que canviaran el comportament del registre de depuració:
Nom | Propòsit |
---|---|
DEBUG |
Activa / desactiva els espais de noms de depuració específics. |
DEBUG_HIDE_DATE |
Amaga la data de la sortida de depuració (que no és TTY). |
DEBUG_COLORS |
Utilitzar 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.
Formatadors
La depuració utilitza el format d’ estil printf . A continuació es mostren els formats admesos oficialment:
Formatador | Representació |
---|---|
%O |
Imprimiu bastant un objecte en diverses línies. |
%o |
Imprimiu bastant un objecte tot en una sola línia. |
%s |
Corda. |
%d |
Nombre (tant sencer com flotant). |
%j |
JSON. 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 formats personalitzats ampliant l' debug.formatters
objecte. Per exemple, si voleu afegir suport per representar un buffer com a hexadecimal
%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
Es pot construir un script compatible amb el navegador usant browserify , o simplement utilitzar el browserify-as-a-service acumulació , si vostè no desitja construir per si mateix.
De depuració permeten estat es conserva actualment per localStorage
Penseu en la situació que es mostra a continuació, on tens. worker:a
I worker:b
, i el desig de depurar tant Activeu aquesta utilitzant. 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
es registrarà a stderr, però es pot configurar per espai de noms substituint 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 trucant al enable()
mètode:
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'));
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 prèviament:
1
2$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
=> false
Comprovar si hi ha habilitat un objectiu de depuració
Després de crear una instància de depuració, podeu determinar si està habilitada o no comprovant la enabled
propietat:
1
2
3
4
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
També podeu canviar manualment aquesta propietat per obligar a habilitar o desactivar la instància de depuració.
Autors
- TJ Holowaychuk
- Nathan Rajlich
- Andrew Rhyne
Patrocinadors
Ajudeu-nos amb una donació mensual i ajudeu-nos a continuar les nostres activitats. [ Feu-vos un patrocinador ]
Patrocinadors
Feu-vos patrocinador i obteniu el vostre logotip al nostre README a Github amb un enllaç al vostre lloc. [ Feu-vos patrocinador ]
Llicència
(La llicència MIT)
Copyright (c) 2014-2017 TJ Holowaychuk < tj@vision-media.ca >
Es concedeix, de manera gratuïta, permís a qualsevol persona que obtingui una còpia d’aquest programari i dels fitxers de documentació associats (el “programari”) per tractar el programari sense restriccions, inclosos, sense limitacions, els drets d’ús, còpia, modificació, combinació , publicar, distribuir, subllicenciar i / o vendre còpies del programari i permetre que les persones a les quals es proporciona el programari ho facin, amb les següents condicions:
L’avís de copyright anterior i aquest avís de permís s’inclouran a totes les còpies o parts importants del programari.
EL PROGRAMARI ES PROPORCIONA “SÓN”, SENSE GARANTIA DE NINGÚN TIPUS, EXPRESA O IMPLÍCITA, INCLOSA PERUT NO LIMITADA A LES GARANTIES DE COMERCIALITAT, IDONEITAT PER A UN PROPOSESIT PARTICULAR I NO INFRACCIÓ. DANYS O ALTRES RESPONSABILITATS, SIGUIN EN UNA ACCIÓ DE CONTRACTE, TORT O ALTRES, SORTIDES DE, FUENT O EN RELACIÓ AMB EL PROGRAMARI O L'ÚS O ALTRES TRACTAMENTS DEL PROGRAMARI.