Módulo comunitario incrible

depurar

Estado de compilación Estado de cobertura Folgazán OpenCollective OpenCollective

Unha pequena utilidade de depuración de JavaScript baseada na técnica de depuración do núcleo de Node.js. Funciona en Node.js e navegadores web.

Instalación

1
$ npm install debug

Uso

debugexpón unha función; simplemente pase esta función o nome do seu módulo e devolverá unha versión decorada console.errorpara que lle pase instrucións de depuración. Isto permitiralle alternar a saída de depuración para diferentes partes do seu módulo e do módulo. coma un todo.

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

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

A DEBUGvariable de contorno úsase entón para habilitalos baseados en nomes espaciados ou delimitados por comas.

Aquí tes algúns exemplos:

captura de pantalla 08-08-2017 ás 12 53 04 horas captura de pantalla 08-08-2017 ás 12 53 38 horas captura de pantalla 08-08-2017 ás 12 53 25 horas

Nota de Windows

En Windows a variable de entorno configúrase empregando o setcomando.

1
set DEBUG=*,-not_this

Teña en conta que PowerShell usa sintaxe diferente para establecer variables de entorno.

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

A continuación, execute o programa para ser depurado como de costume.

Cores do espazo de nomes

Cada instancia de depuración ten unha cor xerada baseada no seu nome de espazo de nome. Isto axuda ao analizar visualmente a saída de depuración para identificar a que instancia de depuración pertence unha liña de depuración.

Node.js

En Node.js, as cores están habilitadas cando stderr é un TTY. Tamén debería instalar o supports-colormódulo xunto coa depuración; se non, depuración só empregará un pequeno puñado de cores básicas.

Navegador web

As cores tamén están habilitadas nos "Inspectores web" que entenden a %copción de formato. Son inspectores web de WebKit, Firefox ( desde a versión 31 ) e o complemento Firebug para Firefox (calquera versión).

Diferencia de milisegundo

Cando se desenvolve activamente unha aplicación pode ser útil ver cando se pasa o tempo entre unha debug()chamada e a seguinte. Supoñamos, por exemplo, que invoca debug()antes de solicitar un recurso e, despois, o "+ NNNms" amosaralle canto tempo pasou entre chamadas.

Cando stdout non é un TTY, Date#toISOString()úsase, o que o fai máis útil para rexistrar a información de depuración como se mostra a continuación:

Convencións

Se está a usar isto nunha ou máis das súas bibliotecas, debería empregar o nome da súa biblioteca para que os desenvolvedores alternen a depuración como se desexe sen adiviñar nomes. Se ten máis dun depurador, debería prefixalos co seu nome use ":" para separar funcións. Por exemplo, "bodyParser" de Connect sería "connect: bodyParser". Se engade un "*" ao final do seu nome, sempre estará habilitado independentemente da configuración do DEBUG variable de contorno. Podes usalo para a saída normal e para a saída de depuración.

Comodíns

O *carácter pode usarse como comodín. Supoñamos, por exemplo, que a súa biblioteca ten depuradores chamados "connect: bodyParser", "connect: compress", "connect: session", en vez de enumerar os tres con DEBUG=connect:bodyParser,connect:compress,connect:session, pode simplemente facer DEBUG=connect:*ou executar todo o que use este módulo simplemente use DEBUG=*.

Tamén pode excluír depuradores específicos prefixándoos cun carácter "-". Por exemplo, DEBUG=*,-connect:*incluiría todos os depuradores excepto os que comecen por "conectar:".

Variables de ambiente

Ao executar a través de Node.js, pode establecer algunhas variables de entorno que cambiarán o comportamento do rexistro de depuración:

Nome Propósito
DEBUG Activa / desactiva os espazos de nomes de depuración específicos.
DEBUG_HIDE_DATE Ocultar data da saída de depuración (non TTY).
DEBUG_COLORS Indica se se usan ou non cores na saída de depuración.
DEBUG_DEPTH Profundidade de inspección de obxectos.
DEBUG_SHOW_HIDDEN Mostra propiedades ocultas en obxectos inspeccionados.

Nota: as variables de contorno que comezan DEBUG_acaban converténdose nun obxecto Options que se emprega con %o/ %Oformatters. Vexa a documentación de Node.js util.inspect() para a lista completa.

Formatos

A depuración usa o formato printf . A continuación móstranse os formatos compatibles oficialmente:

Formador Representación
%O Imprima bastante un obxecto en varias liñas.
%o Imprime bastante un obxecto nunha soa liña.
%s Corda.
%d Número (enteiro e flotante).
%j JSON. Substituído pola cadea "[Circular]" se o argumento contén referencias circulares.
%% Signo de porcentaxe único ('%'). Isto non consume argumentos.

Custom formatters

Podes engadir formatos personalizados estendendo o debug.formattersobxecto. Por exemplo, se queres engadir soporte para representar un búfer como hexadecimal %h, podes facer 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 para navegador

Podes construir un script navegador listo para usar browserify , ou simplemente usar o browserify-as-a-Service de construción , se non quere constrúe-lo só.

De depuración activar o estado está persistiu por localStorageConsidere a situación móstrase a continuación onde ten. worker:aE worker:b, e desexo para depurar tanto Pode activar esta a usar. localStorage.debug:

1
localStorage.debug = 'worker:*'

E logo actualiza a páxina.

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

Fluxos de saída

Por defecto debugrexistrarase en stderr, con todo isto pódese configurar por espazo de nome substituíndo o logmétodo:

Exemplo 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

Tamén pode habilitar a depuración dinámicamente chamando ao 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'));

imprimir:

1 2 3
1 false 2 true 3 false

Uso:
enable(namespaces)
namespacespode incluír modos separados por dous puntos e comodíns.

Teña en conta que chamar enable()completamente anula a variable DEBUG establecida previamente:

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

Comprobando se está activado un destino de depuración

Despois de crear unha instancia de depuración, pode determinar se está activada ou non comprobando a enabledpropiedade:

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

Tamén pode cambiar manualmente esta propiedade para forzar a habilitación ou desactivación da instancia de depuración.

Autores

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

Patrocinadores

Axúdanos cunha doazón mensual e axúdanos a continuar as nosas actividades. [ Convértete nun patrocinador ]

Patrocinadores

Faite patrocinador e obtén o teu logotipo no noso README en Github cunha ligazón ao teu sitio. [ Faite patrocinador ]

Licenza

(A licenza MIT)

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

Autorízase de xeito gratuíto a calquera persoa que obteña unha copia deste software e ficheiros de documentación asociados (o "Software") para tratar o software sen restricións, incluíndo sen limitación os dereitos de uso, copia, modificación, fusión , publicar, distribuír, sublicenciar e / ou vender copias do software e permitir que as persoas ás que se facilite o software fagan as condicións seguintes:

O aviso de copyright anterior e este aviso de permiso incluiranse en todas as copias ou partes importantes do software.

O SOFTWARE FORMÉTASE "ESTÁ", SEN GARANTÍA DE NINGÚN TIPO, EXPRESA OU IMPLÍCITA, INCLUÍDO PERO NON LIMITADO ÁS GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDADE PARA UN PROPÓSITO PARTICULAR E NON INFRACCIÓN. DANOS OU OUTRA RESPONSABILIDADE, TANTO NUNHA ACCIÓN DO CONTRATO, TORT OU DE OUTRO FORO, PROCEDENTES DE, FÓRESE OU EN CONEXIÓN CO SOFTWARE OU USO OU OUTROS TRATAMENTOS NO SOFTWARE.