Módulo de comunidad impresionante

depurar

Estado de la construcción Estado de cobertura Flojo OpenCollective OpenCollective

Una pequeña utilidad de depuración de JavaScript basada en la técnica de depuración del núcleo de Node.js. Funciona en Node.js y navegadores web.

Instalación

1
$ npm install debug

Uso

debugexpone una función; simplemente pase a esta función el nombre de su módulo, y devolverá una versión decorada de console.errorpara 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 el módulo como un todo.

App.js de ejemplo :

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');

Ejemplo worker.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 DEBUGvariable de entorno se utiliza para permitir que éstos basado en el espacio o nombres separados por comas.

Aquí hay unos ejemplos:

captura de pantalla 2017-08-08 a las 12 53 04 pm captura de pantalla 2017-08-08 a las 12 53 38 pm captura de pantalla 2017-08-08 a las 12 53 25 pm

Nota de Windows

En Windows, la variable de entorno se establece mediante el setcomando.

1
set DEBUG=*,-not_this

Tenga en cuenta que PowerShell usa una sintaxis diferente para establecer variables de entorno.

1
$env:DEBUG = "*,-not_this"

Luego, ejecute el programa para depurarlo como de costumbre.

Colores del espacio de nombres

Cada instancia de depuración tiene un color generado según su nombre de 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.

Node.js

En Node.js, los colores están habilitados cuando stderr es un TTY. También debe instalar el supports-colormódulo junto con debug, de lo contrario, debug solo usará un pequeño puñado de colores básicos.

Navegador web

Los colores también están habilitados en los "inspectores web" que entienden la %copción de formato. Estos son los inspectores web WebKit, Firefox ( desde la versión 31 ) y el complemento Firebug para Firefox (cualquier versión).

Diferencia de milisegundos

Cuando se desarrolla 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, el "+ NNNms" le mostrará cuánto tiempo se invirtió. entre llamadas.

Cuando stdout no es un TTY, Date#toISOString()se usa, lo que lo 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 desee sin adivinar nombres. Si tiene más de un depurador, debe prefijarlos con 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. A continuación, puede utilizarlo para la salida normal, así como 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, simplemente puede hacerlo DEBUG=connect:*, o ejecutar todo lo que use este módulo simplemente use DEBUG=*.

También puede excluir depuradores específicos colocándolos como prefijo con un carácter "-". Por ejemplo, DEBUG=*,-connect:*incluiría todos los depuradores excepto los que comienzan con "conectar:".

Variables de entorno

Al ejecutar Node.js, puede establecer algunas variables de entorno que cambiarán el comportamiento del registro de depuración:

Nombre Propósito
DEBUG Habilita / deshabilita espacios de nombres de depuración específicos.
DEBUG_HIDE_DATE Ocultar la fecha de la salida de depuración (no TTY).
DEBUG_COLORS Si usar o no colores en la salida de depuración.
DEBUG_DEPTH Profundidad de inspección de objetos.
DEBUG_SHOW_HIDDEN Muestra las propiedades ocultas de los objetos inspeccionados.

Nota: Las variables de entorno que comienzan con DEBUG_terminan convirtiéndose en un objeto Options que se usa con %o/ %Oformatters. Consulte la documentación de Node.js para util.inspect() obtener la lista completa.

Formateadores

Debug usa formato de estilo printf . A continuación, se muestran los formateadores admitidos oficialmente:

Formateador Representación
%O Imprime un objeto en varias líneas.
%o Imprime un objeto de forma bonita en una sola línea.
%s Cuerda.
%d Número (tanto entero como flotante).
%j JSON. Reemplazado con la cadena '[Circular]' si el argumento contiene referencias circulares.
%% Signo de porcentaje único ('%'). Esto no consume un argumento.

Custom formatters

Puede agregar formateadores personalizados extendiendo el debug.formattersobjeto. Por ejemplo, si desea agregar soporte para representar un búfer como hexadecimal con %h, puede hacer algo como:

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

Soporte del navegador

Se puede construir una secuencia de comandos compatible con el navegador usando browserify , o simplemente utilizar el browserify-as-a-service acumulación , si usted no desea construir por sí mismo.

Actualmente, el estado de habilitación de depuración persiste localStorage. Considere la situación que se muestra a continuación donde tiene worker:ay worker:b, y desea depurar ambos. Puede habilitar esto usando localStorage.debug:

1
localStorage.debug = 'worker:*'

Y luego actualice la página.

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);

Flujos de salida

De forma predeterminada, debugse registrará en stderr, sin embargo, esto se puede configurar por espacio de nombres anulando el logmétodo:

Ejemplo 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');

Establecer dinámicamente

También puede habilitar la depuración dinámicamente llamando al enable()método:

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'));

impresión:

1 2 3
1 false 2 true 3 false

Uso:
enable(namespaces)
namespacespuede incluir modos separados por dos puntos y comodines.

Tenga en cuenta que la llamada enable()anula completamente la variable DEBUG establecida anteriormente:

1 2
$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' => false

Comprobando si un destino de depuración está habilitado

Una vez que haya creado una instancia de depuración, puede determinar si está habilitada o no verificando la enabledpropiedad:

1 2 3 4 5
const debug = require('debug')('http'); if (debug.enabled) { // do stuff... }

También puede alternar manualmente esta propiedad para forzar la habilitación o deshabilitación de la instancia de depuración.

Autores

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew 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 del MIT)

Copyright (c) 2014-2017 TJ Holowaychuk < tj@vision-media.ca >

Por la 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 proporcione el Software lo hagan, sujeto a las siguientes condiciones:

El aviso de copyright 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, APTITUD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. DAÑOS U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O DE OTRO MODO, QUE SURJAN DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTROS NEGOCIOS EN EL SOFTWARE.