Impresionante módulo comunitario

depurar

Estado de construción Estado de cobertura Folla OpenCollective OpenCollective

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

Instalación

1
$ npm install debug

Uso

debugexpón unha función; simplemente pase a esta función o nome do seu módulo e devolverá unha versión decorada de 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, así como o 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 ambiente emprégase entón para activalas en función de nomes delimitados por espazos ou comas.

Aquí tes algúns exemplos:

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

Nota de Windows

En Windows, a variable de ambiente establécese mediante o setcomando.

1
set DEBUG=*,-not_this

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

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 en función do nome do seu espazo de nomes. 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 debes instalar o supports-colormódulo xunto a depuración, se non, depurar só usará un pequeno puñado de cores básicas.

Navegador web

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

Diferencia de milisegundos

Cando se desenvolve activamente unha aplicación, pode ser útil ver cando pasa o tempo entre unha debug()chamada e a seguinte. Supoñamos, por exemplo, que invocas debug()antes de solicitar un recurso, e despois tamén, o "+NNNms" amosarache 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ás a usar isto nunha ou máis das túas bibliotecas, debes usar o nome da túa biblioteca para que os desenvolvedores poidan alternar a depuración como desexe sen adiviñar os nomes. Se tes máis dun depurador, debes prefixo co nome da túa biblioteca e use ":" para separar funcións. Por exemplo, "bodyParser" de Connect sería "connect:bodyParser". Se engades un "*" ao final do seu nome, sempre estará activado independentemente da configuración do DEBUG variable de ambiente. Podes usalo para a saída normal así como para a saída de depuración.

Comodíns

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

Tamén pode excluír depuradores específicos poñéndoos como prefixo un carácter "-". Por exemplo, DEBUG=*,-connect:*incluiría todos os depuradores excepto os que comezan por "conectar:".

Variables de ambiente

Ao executar Node.js, pode establecer algunhas variables de ambiente que cambiarán o comportamento do rexistro de depuración:

Nome Finalidade
DEBUG Activa/desactiva espazos de nomes de depuración específicos.
DEBUG_HIDE_DATE Ocultar a data da saída de depuración (non TTY).
DEBUG_COLORS Indica se usar cores ou non na saída de depuración.
DEBUG_DEPTH Profundidade de inspección do obxecto.
DEBUG_SHOW_HIDDEN Mostra as propiedades ocultas dos obxectos inspeccionados.

Nota: as variables de ambiente que comezan por DEBUG_acaban converténdose nun obxecto Opcións que se usa con %o/ %Oformateadores. Consulte a documentación de Node.js para util.inspect() ver a lista completa.

Formatadores

Depurar usa formato de estilo printf . A continuación móstranse os formateadores admitidos oficialmente:

Formatador Representación
%O Imprime moi ben un obxecto en varias liñas.
%o Imprime moi ben un obxecto nunha soa liña.
%s Corda.
%d Número (tanto enteiro como flotante).
%j JSON. Substitúese pola cadea "[Circular]" se o argumento contén referencias circulares.
%% Sinal de porcentaxe único ('%'). Isto non consume ningún argumento.

Custom formatters

Podes engadir formatos personalizados estendendo o debug.formattersobxecto. Por exemplo, se queres engadir compatibilidade para renderizar un búfer como hexadecimal con %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 de navegador

Podes crear un script preparado para o navegador usando browserify , ou simplemente usar a compilación browserify-as-a-service , se non queres crealo por ti mesmo.

O estado de activación da depuración continúa actualmente por localStorage. Considere a situación que se mostra a continuación onde tes worker:ae worker:b, e queres depurar ambos. Podes activalo usando localStorage.debug:

1
localStorage.debug = 'worker:*'

E despois 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 debuginiciarase sesión en stderr, pero pódese configurar por espazo de nomes anulando 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 activar a depuración dinámicamente chamando ao 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)
namespacespode incluír modos separados por dous puntos e comodíns.

Teña en conta que a chamada enable()anula completamente a variable DEBUG establecida anteriormente:

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

Comprobando se un destino de depuración está activado

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

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

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

Autores

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

Apoiadores

Apóyanos cunha doazón mensual e axúdanos a continuar coas nosas actividades. [ Conviértete nun patrocinador ]

Patrocinadores

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

Licenza

(Licenza MIT)

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

Concédese permiso, de forma gratuíta, a calquera persoa que obteña unha copia deste software e os ficheiros de documentación asociados (o "Software"), para manexar 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 lles proporcione o Software o fagan, suxeitas ás seguintes condicións:

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

O SOFTWARE PROPORCIONASE "TAL CUAL", SEN GARANTÍA DE NINGÚN TIPO, EXPRESA OU IMPLÍCITA, INCLUÍDAS, PERO NON LIMITADAS ÁS GARANTÍAS DE COMERCIABILIDADE, IDONEIDAD PARA UN FIN PARTICULAR E NON INFRACCIÓN. EN NINGÚN CASO OS AUTORES OU TITULARIDADES SERÁN RESPONSABLES A GARANTÍA DA COPIA. RECLAMACIÓN, DANOS OU OUTRAS RESPONSABILIDADES, XA NUNHA ACCIÓN DE CONTRATO, EXPLOTACIÓN OU ​​DE OUTRO MODO, DERIVADAS DO SOFTWARE, DO USO OU OUTROS TRATOS DO SOFTWARE, OU EN RELACIÓN CON EL.