Awesome Community Module

depurar

Estado de compilación Estado de cobertura Flojo OpenCollective OpenCollective

Una pequeña utilidad de depuración de JavaScript modelada a partir de 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 el nombre de su módulo a esta función, y le devolverá una versión decorada de console.error para que le pase las 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.

Ejemplo app.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 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 usa para habilitarlos en función del espacio o los nombres delimitados por comas.

Aquí hay unos ejemplos:

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

Nota de Windows

En Windows, la variable de entorno se establece con 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 en función del nombre del espacio de nombres, lo que ayuda a 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 de supports-color junto con la depuración, de lo contrario, la depuración solo usará un pequeño puñado de colores básicos.

Navegador web

Los colores también están habilitados en "Web Inspectors" que comprenden la opción de formato %c 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 cuándo pasa el tiempo entre una llamada a debug() y la siguiente. Supongamos, por ejemplo, que invocas debug() antes de solicitar un recurso, y después, aparecerá "+ 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 según lo deseen sin adivinar los nombres. Si tiene más de un depurador, debe prefijarlos con el nombre de su biblioteca y use ":" para separar las características. 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 usarla 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 aquellos 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 fecha de salida de depuración (no TTY).
DEBUG_COLORS Si se usan 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 Opciones que se usa con formateadores %o / %O Consulte la documentación de Node.js para util.inspect() para obtener la lista completa.

Formateadores

La depuración utiliza el formato de estilo printf . A continuación se muestran los formateadores compatibles oficialmente:

Formateador Representación
%O Imprime un objeto en varias líneas.
%o Imprime un Objeto todo 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 objeto debug.formatters . Por ejemplo, si desea agregar soporte para representar un Buffer 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 de 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.

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

1
localStorage.debug = 'worker:*'

Y luego actualiza 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 por completo la variable DEBUG previamente establecida:

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

Comprobando si un objetivo de depuración está habilitado

Después de crear una instancia de depuración, puede determinar si está habilitada o no al verificar 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 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 un patrocinador ]

Patrocinadores

Conviértase en un patrocinador y obtenga su logotipo en nuestro archivo README en Github con un enlace a su sitio. [ Conviértase en un patrocinador ]

Licencia

(La licencia MIT)

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

Por la presente, se otorga permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el 'Software'), para operar en 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 a las personas a quienes se les proporciona el Software que 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 SIN LIMITARSE A LAS GARANTÍAS DE COMERCIABILIDAD, APTITUD PARA UN PROPÓSITO Y NO INFRACCIÓN EN PARTICULAR. RECLAMACIÓN, DAÑOS U OTRA RESPONSABILIDAD, YA SEA POR ACCIÓN DE CONTRATO, TORTURA O DE OTRA MANERA, DERIVADA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS OFERTAS EN EL SOFTWARE.