Módulo de comunidad impresionante

depurar

Estado de 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

debug expone una función; simplemente pase a esta función el nombre de su módulo, y devolverá una versión decorada de console.error para que pueda pasar declaraciones de depuración. Esto le permitirá alternar la salida de depuración para diferentes partes de su módulo como así como el módulo en su conjunto.

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 variable de entorno DEBUG se utiliza para habilitarlos en función de los nombres delimitados por espacios o comas.

Aquí hay unos ejemplos:

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

Nota de Windows

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

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

Node.js

En Node.js, los colores están habilitados cuando stderr es un TTY. También debe instalar el módulo supports-color 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 "Inspectores web" que entienden la opción de formato %c . 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 una aplicación de forma activa, puede resultar útil ver el tiempo transcurrido entre una llamada a debug() y la siguiente. Supongamos, por ejemplo, que invoca a debug() antes de solicitar un recurso y, después, también se mostrará "+ NNNms" usted cuánto tiempo pasó entre llamadas.

Cuando stdout no es un TTY, se usa Date#toISOString() , 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 utilizarla para la salida normal, así como para la salida de depuración.

Comodines

El carácter * se puede usar 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 hacer DEBUG=connect:* , o para ejecutar todo usando este módulo simplemente use DEBUG=* .

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

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 propiedades ocultas en objetos inspeccionados.

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

Formateadores

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

Formateador Representación
%O Imprime un objeto en varias líneas.
%o Imprime un Objeto 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 ('%'). No consume un argumento.

Custom formatters

Puede agregar formateadores personalizados extendiendo el objeto debug.formatters . 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.

De depuración permiten estado se conserva actualmente por localStorage Considere la situación que se muestra a continuación, donde tienes. worker:a y worker:b ., Y el deseo de depurar tanto Puede activar esta 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, la debug se registrará en stderr, sin embargo, esto se puede configurar por espacio de nombres anulando el método de log :

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 método enable() :

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)
namespaces pueden incluir modos separados por dos puntos y comodines.

Tenga en cuenta que llamar a 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 marcando la propiedad enabled :

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 inhabilitació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 FIN DETERMINADO Y NO INFRACCIÓN. RECLAMOS, 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 OTRAS NEGOCIACIONES EN EL SOFTWARE.