depurar
Unha pequena utilidade de depuración de JavaScript inspirada na técnica de depuración do núcleo de Node.js. Funciona en Node.js e en navegadores web.
Instalación
1$ npm install debug
Uso
debug
expón unha función; simplemente pase a esta función o nome do seu módulo e devolverá unha versión decorada de console.error
para que lle pase instrucións de depuración. Isto permitiralle alternar a saída de depuración para diferentes partes do seu módulo, así como o módulo. coma un todo.
Exemplo 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');
Exemplo 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
variable de ambiente emprégase entón para activalas en función de nomes delimitados por espazos ou comas.
Aquí tes algúns exemplos:
Nota de Windows
En Windows, a variable de ambiente establécese mediante o set
comando.
1set DEBUG=*,-not_this
Teña en conta que PowerShell usa unha sintaxe diferente para establecer variables de ambiente.
1$env:DEBUG = "*,-not_this"
A continuación, execute o programa para ser depurado como de costume.
Cores do espazo de nomes
Cada instancia de depuración ten unha cor xerada en función do nome do seu espazo de nomes. Isto axuda ao analizar visualmente a saída de depuración para identificar a que instancia de depuración pertence unha liña de depuración.
Node.js
En Node.js, as cores están habilitadas cando stderr é un TTY. Tamén debes instalar o supports-color
módulo xunto a depuración, se non, depurar só usará un pequeno puñado de cores básicas.
Navegador web
As cores tamén están habilitadas nos "Inspectores web" que comprenden a %c
opción de formato. Estes son os inspectores web de WebKit, Firefox ( desde a versión 31 ) e o complemento Firebug para Firefox (calquera versión).
Diferencia de milisegundos
Cando se desenvolve activamente unha aplicación, pode ser útil ver cando pasa o tempo entre unha debug()
chamada e a seguinte. Supoñamos, por exemplo, que invocas debug()
antes de solicitar un recurso, e despois tamén, o "+NNNms" amosarache canto tempo pasou. entre chamadas.
Cando stdout non é un TTY, Date#toISOString()
úsase, o que o fai máis útil para rexistrar a información de depuración como se mostra a continuación:
Convencións
Se estás a usar isto nunha ou máis das túas bibliotecas, debes usar o nome da túa biblioteca para que os desenvolvedores poidan alternar a depuración como desexe sen adiviñar os nomes. Se tes máis dun depurador, debes prefixo co nome da túa biblioteca e use ":" para separar funcións. Por exemplo, "bodyParser" de Connect sería "connect:bodyParser". Se engades un "*" ao final do seu nome, sempre estará activado independentemente da configuración do DEBUG variable de ambiente. Podes usalo para a saída normal así como para a saída de depuración.
Comodíns
O *
carácter pode usarse como comodín. Supoñamos, por exemplo, que a túa biblioteca ten depuradores chamados "connect:bodyParser", "connect:compress", "connect:session", en lugar de listar os tres con ,
DEBUG=connect:bodyParser,connect:compress,connect:session
simplemente podes facer
DEBUG=connect:*
, ou executar todo o que use este módulo simplemente use DEBUG=*
.
Tamén pode excluír depuradores específicos poñéndoos como prefixo un carácter "-". Por exemplo, DEBUG=*,-connect:*
incluiría todos os depuradores excepto os que comezan por "conectar:".
Variables de ambiente
Ao executar Node.js, pode establecer algunhas variables de ambiente que cambiarán o comportamento do rexistro de depuración:
Nome | Finalidade |
---|---|
DEBUG |
Activa/desactiva espazos de nomes de depuración específicos. |
DEBUG_HIDE_DATE |
Ocultar a data da saída de depuración (non TTY). |
DEBUG_COLORS |
Indica se usar cores ou non na saída de depuración. |
DEBUG_DEPTH |
Profundidade de inspección do obxecto. |
DEBUG_SHOW_HIDDEN |
Mostra as propiedades ocultas dos obxectos inspeccionados. |
Nota: as variables de ambiente que comezan por DEBUG_
acaban converténdose nun obxecto Opcións que se usa con %o
/ %O
formateadores. Consulte a documentación de Node.js para
util.inspect()
ver a lista completa.
Formatadores
Depurar usa formato de estilo printf . A continuación móstranse os formateadores admitidos oficialmente:
Formatador | Representación |
---|---|
%O |
Imprime moi ben un obxecto en varias liñas. |
%o |
Imprime moi ben un obxecto nunha soa liña. |
%s |
Corda. |
%d |
Número (tanto enteiro como flotante). |
%j |
JSON. Substitúese pola cadea "[Circular]" se o argumento contén referencias circulares. |
%% |
Sinal de porcentaxe único ('%'). Isto non consume ningún argumento. |
Custom formatters
Podes engadir formatos personalizados estendendo o debug.formatters
obxecto. Por exemplo, se queres engadir compatibilidade para renderizar un búfer como hexadecimal con
%h
, podes facer algo como:
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
Soporte de navegador
Podes crear un script preparado para o navegador usando browserify , ou simplemente usar a compilación browserify-as-a-service , se non queres crealo por ti mesmo.
O estado de activación da depuración continúa actualmente por localStorage
. Considere a situación que se mostra a continuación onde tes worker:a
e worker:b
, e queres depurar ambos. Podes activalo usando localStorage.debug
:
1localStorage.debug = 'worker:*'
E despois actualiza a páxina.
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 saída
Por defecto debug
iniciarase sesión en stderr, pero pódese configurar por espazo de nomes anulando o log
método:
Exemplo 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');
Establecer dinámicamente
Tamén pode activar a depuración dinámicamente chamando ao enable()
método:
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
Uso: enable(namespaces)
namespaces
pode incluír modos separados por dous puntos e comodíns.
Teña en conta que a chamada enable()
anula completamente a variable DEBUG establecida anteriormente:
1
2$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
=> false
Comprobando se un destino de depuración está activado
Despois de crear unha instancia de depuración, pode determinar se está habilitada ou non marcando a enabled
propiedade:
1
2
3
4
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
Tamén podes cambiar manualmente esta propiedade para forzar a activación ou a desactivación da instancia de depuración.
Autores
- TJ Holowaychuk
- Nathan Rajlich
- Andrew Rhyne
Apoiadores
Apóyanos cunha doazón mensual e axúdanos a continuar coas nosas actividades. [ Conviértete nun patrocinador ]
Patrocinadores
Convértete en patrocinador e obtén o teu logotipo no noso README en Github cunha ligazón ao teu sitio. [ Convértete en patrocinador ]
Licenza
(Licenza MIT)
Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>
Concédese permiso, de forma gratuíta, a calquera persoa que obteña unha copia deste software e os ficheiros de documentación asociados (o "Software"), para manexar o Software sen restricións, incluíndo, sen limitación, os dereitos de uso, copia, modificación, fusión. , publicar, distribuír, sublicenciar e/ou vender copias do Software e permitir que as persoas ás que se lles proporcione o Software o fagan, suxeitas ás seguintes condicións:
O aviso de copyright anterior e este aviso de permiso incluiranse en todas as copias ou partes substanciais do Software.
O SOFTWARE PROPORCIONASE "TAL CUAL", SEN GARANTÍA DE NINGÚN TIPO, EXPRESA OU IMPLÍCITA, INCLUÍDAS, PERO NON LIMITADAS ÁS GARANTÍAS DE COMERCIABILIDADE, IDONEIDAD PARA UN FIN PARTICULAR E NON INFRACCIÓN. EN NINGÚN CASO OS AUTORES OU TITULARIDADES SERÁN RESPONSABLES A GARANTÍA DA COPIA. RECLAMACIÓN, DANOS OU OUTRAS RESPONSABILIDADES, XA NUNHA ACCIÓN DE CONTRATO, EXPLOTACIÓN OU DE OUTRO MODO, DERIVADAS DO SOFTWARE, DO USO OU OUTROS TRATOS DO SOFTWARE, OU EN RELACIÓN CON EL.