depurar
Una pequeña utilidad de depuración de JavaScript modelada a partir de la técnica de depuración central de Node.js. Funciona en Node.js y navegadores web.
Instalación
1$ npm install debug
Uso
debug
expone una función; simplemente pase a esta función el nombre de su módulo y le devolverá una versión decorada para console.error
que pueda pasar declaraciones de depuración. Esto le permitirá alternar la salida de depuración para diferentes partes de su módulo, así como para el módulo. como un todo.
Ejemplo de aplicación.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');
Ejemplo trabajador.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();
Luego, la DEBUG
variable de entorno se utiliza para habilitarlos en función de espacios o nombres delimitados por comas.
Aquí hay unos ejemplos:
nota de windows
En Windows, la variable de entorno se configura mediante el set
comando.
1set DEBUG=*,-not_this
Tenga en cuenta que PowerShell utiliza una sintaxis diferente para establecer variables de entorno.
1$env:DEBUG = "*,-not_this"
Luego, ejecute el programa a depurar como de costumbre.
Colores del espacio de nombres
Cada instancia de depuración tiene un color generado según el nombre de su espacio de nombres. Esto ayuda al analizar visualmente la salida de depuración para identificar a qué instancia de depuración pertenece una línea de depuración.
Nodo.js
En Node.js, los colores están habilitados cuando stderr es un TTY. También debe instalar el supports-color
módulo junto con la depuración; de lo contrario, la depuración solo utilizará un pequeño puñado de colores básicos.
Navegador web
Los colores también están habilitados en los "inspectores web" que comprenden la %c
opción de formato: estos son los inspectores web de WebKit, Firefox ( desde la versión 31 ) y el complemento Firebug para Firefox (cualquier versión).
Diferencia de milisegundos
Al desarrollar activamente una aplicación, puede ser útil ver el tiempo transcurrido entre una debug()
llamada y la siguiente. Supongamos, por ejemplo, que invoca debug()
antes de solicitar un recurso, y después también, el "+NNNms" le mostrará cuánto tiempo pasó. entre llamadas.
Cuando la salida estándar no es un TTY, Date#toISOString()
se utiliza, lo que la hace más útil para registrar la información de depuración como se muestra a continuación:
Convenciones
Si está usando esto en una o más de sus bibliotecas, debe usar el nombre de su biblioteca para que los desarrolladores puedan alternar la depuración como lo deseen sin adivinar los nombres. Si tiene más de un depurador, debe anteponerles el nombre de su biblioteca y use ":" para separar funciones. Por ejemplo, "bodyParser" de Connect sería "connect:bodyParser". Si agrega un "*" al final de su nombre, siempre estará habilitado independientemente de la configuración de DEBUG. variable de entorno Luego puede usarlo para la salida normal y para la salida de depuración.
comodines
El *
carácter puede usarse como comodín. Supongamos, por ejemplo, que su biblioteca tiene depuradores llamados "connect:bodyParser", "connect:compress", "connect:session", en lugar de enumerar los tres con ,
DEBUG=connect:bodyParser,connect:compress,connect:session
puede simplemente hacer
DEBUG=connect:*
, o ejecutar todo lo que use este módulo simplemente use DEBUG=*
.
También puede excluir depuradores específicos anteponiéndoles un carácter "-". Por ejemplo, DEBUG=*,-connect:*
incluiría todos los depuradores excepto aquellos que comiencen con "connect:".
Variables de entorno
Al ejecutar Node.js, puede configurar algunas variables de entorno que cambiarán el comportamiento del registro de depuración:
Nombre | Objetivo |
---|---|
DEBUG |
Habilita/deshabilita espacios de nombres de depuración específicos. |
DEBUG_HIDE_DATE |
Ocultar fecha de la salida de depuración (no TTY). |
DEBUG_COLORS |
Si se utilizan o no colores en la salida de depuración. |
DEBUG_DEPTH |
Profundidad de inspección de objetos. |
DEBUG_SHOW_HIDDEN |
Muestra propiedades ocultas en los objetos inspeccionados. |
Nota: Las variables de entorno que comienzan con DEBUG_
terminan convirtiéndose en un objeto Opciones que se usa con %o
/ %O
formateadores. Consulte la documentación de Node.js para
util.inspect()
obtener la lista completa.
Formateadores
La depuración utiliza formato de estilo printf . A continuación se muestran los formateadores admitidos oficialmente:
Formateador | Representación |
---|---|
%O |
Imprima un objeto en varias líneas. |
%o |
Imprime un objeto en una sola línea. |
%s |
Cadena. |
%d |
Número (tanto entero como flotante). |
%j |
JSON. Se reemplaza con la cadena '[Circular]' si el argumento contiene referencias circulares. |
%% |
Signo de porcentaje único ('%'). Esto no consume un argumento. |
Custom formatters
Puedes agregar formateadores personalizados extendiendo el debug.formatters
objeto. Por ejemplo, si quisieras agregar soporte para representar un búfer como hexadecimal con
%h
, podrías hacer 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 del navegador
Puede crear un script listo para el navegador usando browserify , o simplemente usar la compilación browserify-as-a-service , si no desea crearlo usted mismo.
El estado de habilitación de depuración actualmente persiste en localStorage
. Considere la situación que se muestra a continuación donde tiene worker:a
y worker:b
y desea depurar ambos. Puede habilitar esto usando localStorage.debug
:
1localStorage.debug = 'worker:*'
Y luego actualice 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);
Flujos de salida
De forma predeterminada, debug
iniciará sesión en stderr; sin embargo, esto se puede configurar por espacio de nombres anulando el log
método:
Ejemplo 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
También puedes habilitar la depuración dinámicamente llamando al 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
puede incluir modos separados por dos puntos y comodines.
Tenga en cuenta que llamar enable()
anula por completo la variable DEBUG previamente configurada:
1
2$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
=> false
Comprobar si un objetivo de depuración está habilitado
Después de haber creado una instancia de depuración, puede determinar si está habilitada o no verificando la enabled
propiedad:
1
2
3
4
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
También puede alternar manualmente esta propiedad para forzar que la instancia de depuración se habilite o deshabilite.
Autores
- TJ Holowaychuk
- Nathan Rajlich
- Andres Rhyne
Patrocinadores
Apóyanos con una donación mensual y ayúdanos a continuar con nuestras actividades. [ Conviértete en patrocinador ]
Patrocinadores
Conviértase en patrocinador y obtenga su logotipo en nuestro README en Github con un enlace a su sitio. [ Conviértase en patrocinador ]
Licencia
(La licencia MIT)
Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el 'Software'), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE LOS DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN TIPO RECLAMACIÓN, DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJAN DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.