Impresionante módulo comunitario

depurar

Estado de construcción Estado de cobertura Flojo Colectivo Abierto Colectivo Abierto

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

debugexpone una función; simplemente pase a esta función el nombre de su módulo y le devolverá una versión decorada para console.errorque 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 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 trabajador.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();

Luego, la DEBUGvariable de entorno se utiliza para habilitarlos en función de espacios o nombres delimitados 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 h

nota de windows

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

1
set 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-colormó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 %copció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:sessionpuede 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/ %Oformateadores. 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.formattersobjeto. 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 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

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:ay worker:by 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, debuginiciará sesión 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 puedes habilitar la depuración dinámicamente llamando al enable()método:

1 2 3 4 5 6 7 8 9
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'));

imprimir:

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 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 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 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.