Module communautaire génial

déboguer

État de la construction État de la couverture Mou OpenCollective OpenCollective

Un petit utilitaire de débogage JavaScript calqué sur la technique de débogage du noyau Node.js. Fonctionne dans Node.js et les navigateurs Web.

Installation

1
$ npm install debug

Usage

debug expose une fonction; transmettez simplement à cette fonction le nom de votre module, et il renverra une version décorée de console.error pour que vous passiez des instructions de débogage. Cela vous permettra de basculer la sortie de débogage pour différentes parties de votre module comme ainsi que le module dans son ensemble.

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

Exemple 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 d'environnement DEBUG est ensuite utilisée pour les activer en fonction d'un espace ou de noms séparés par des virgules.

Voici quelques exemples:

capture d'écran 08/08/2017 à 12 53 16 h 00capture d'écran 08/08/2017 à 12 53 38 pmcapture d'écran 08/08/2017 à 12 53 25 pm

Remarque Windows

Sous Windows, la variable d'environnement est définie à l'aide de la commande set .

1
set DEBUG=*,-not_this

Notez que PowerShell utilise une syntaxe différente pour définir les variables d'environnement.

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

Ensuite, exécutez le programme à déboguer comme d'habitude.

Couleurs de l'espace de noms

Chaque instance de débogage a une couleur générée pour elle en fonction de son nom d'espace de noms. Cela permet lors de l'analyse visuelle de la sortie de débogage d'identifier à quelle instance de débogage appartient une ligne de débogage.

Node.js

En Node.js, les couleurs sont activés lorsque stderr est un ATS. Vous devez également installer le supports-color le module à côté de débogage, sinon débogage utilisera uniquement une petite poignée de couleurs de base.

Navigateur Web

Les couleurs sont également activées sur les "Inspecteurs Web" qui comprennent l'option de formatage %c . Ce sont les inspecteurs Web WebKit, Firefox ( depuis la version 31 ) et le plugin Firebug pour Firefox (toute version).

Diff en millisecondes

Lors du développement actif d'une application, il peut être utile de voir le temps écoulé entre un appel debug() et le suivant. Supposons par exemple que vous invoquiez debug() avant de demander une ressource, et après aussi, le "+ NNNms" s'affichera vous combien de temps a été passé entre les appels.

Lorsque stdout n'est pas un TTY, Date#toISOString() est utilisé, ce qui le rend plus utile pour la journalisation des informations de débogage comme indiqué ci-dessous:

Conventions

Si vous utilisez ce dans un ou plusieurs de vos bibliothèques, vous devez utiliser le nom de votre bibliothèque afin que les développeurs peuvent activer le débogage comme vous le souhaitez sans deviner les noms. Si vous avez plus d'un débogueurs vous devez les préfixe avec votre nom de la bibliothèque et utilisez ":" pour séparer les fonctionnalités. Par exemple, "bodyParser" de Connect serait alors "connect: bodyParser". Si vous ajoutez un "*" à la fin de votre nom, il sera toujours activé quel que soit le paramètre de DEBUG variable d'environnement. Vous pouvez ensuite l'utiliser pour la sortie normale ainsi que la sortie de débogage.

Caractères génériques

Le caractère * peut être utilisé comme caractère générique. Supposons par exemple que votre bibliothèque possède des débogueurs nommés "connect: bodyParser", "connect: compress", "connect: session", au lieu de lister les trois avec DEBUG=connect:bodyParser,connect:compress,connect:session , vous pouvez simplement faire DEBUG=connect:* , ou pour tout exécuter en utilisant ce module, utilisez simplement DEBUG=* .

Vous pouvez également exclure des débogueurs spécifiques en les préfixant avec un caractère "-". Par exemple, DEBUG=*,-connect:* inclurait tous les débogueurs sauf ceux commençant par "connect:".

Variables d'environnement

Lors de l'exécution de Node.js, vous pouvez définir quelques variables d'environnement qui modifieront le comportement de la journalisation du débogage:

Nom Objectif
DEBUG Active / désactive les espaces de noms de débogage spécifiques.
DEBUG_HIDE_DATE Masquer la date de la sortie de débogage (non-TTY).
DEBUG_COLORS Utiliser ou non les couleurs dans la sortie de débogage.
DEBUG_DEPTH Profondeur d'inspection des objets.
DEBUG_SHOW_HIDDEN Affiche les propriétés masquées sur les objets inspectés.

Remarque: les variables d'environnement commençant par DEBUG_ finissent par être converties en un objet Options qui est utilisé avec les formateurs %o / %O Consultez la documentation Node.js pour util.inspect() pour la liste complète.

Formateurs

Debug utilise une mise en forme de style printf . Voici les formateurs officiellement pris en charge:

Formateur Représentation
%O Imprimez joliment un objet sur plusieurs lignes.
%o Imprimez joliment un objet sur une seule ligne.
%s Chaîne.
%d Nombre (entier et flottant).
%j JSON. Remplacé par la chaîne «[Circular]» si l'argument contient des références circulaires.
%% Signe de pourcentage unique ('%'). Cela ne consomme pas d'argument.

Custom formatters

Vous pouvez ajouter des formateurs personnalisés en étendant l'objet debug.formatters . Par exemple, si vous souhaitez ajouter la prise en charge du rendu d'un tampon au format hexadécimal avec %h , vous pouvez faire quelque chose comme:

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

Prise en charge du navigateur

Vous pouvez construire un script prêt navigateur en utilisant browserify , ou tout simplement utiliser le browserify-as-a-service de construction , si vous ne voulez pas construire vous - même.

L'état d'activation de Debug est actuellement conservé par localStorage . Considérez la situation ci-dessous où vous avez worker:a et worker:b , et que vous souhaitez déboguer les deux. Vous pouvez l'activer à l'aide de localStorage.debug :

1
localStorage.debug = 'worker:*'

Et puis actualisez la page.

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

Flux de sortie

Par défaut, le debug se connectera à stderr, mais cela peut être configuré par espace de noms en remplaçant la méthode de log :

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

Définir dynamiquement

Vous pouvez également activer le débogage dynamiquement en appelant la méthode 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'));

impression:

1 2 3
1 false 2 true 3 false

Usage:
enable(namespaces)
namespaces peuvent inclure des modes séparés par deux points et des caractères génériques.

Notez que l'appel de enable() remplace complètement la variable DEBUG précédemment définie:

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

Vérifier si une cible de débogage est activée

Après avoir créé une instance de débogage, vous pouvez déterminer si elle est activée ou non en vérifiant la propriété enabled :

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

Vous pouvez également activer ou désactiver manuellement cette propriété pour forcer l'instance de débogage à être activée ou désactivée.

Auteurs

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

Soutiens

Soutenez-nous avec un don mensuel et aidez-nous à poursuivre nos activités. [ Devenir contributeur]

Les sponsors

Devenez sponsor et obtenez votre logo sur notre README sur Github avec un lien vers votre site. [ Devenir sponsor ]

Licence

(La licence MIT)

Droits d'auteur (c) 2014-2017 TJ Holowaychuk < tj@vision-media.ca >

L'autorisation est par la présente accordée, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le `` logiciel ''), de traiter le logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion , publier, distribuer, sous-licencier et / ou vendre des copies du Logiciel, et permettre aux personnes à qui le Logiciel est fourni de le faire, sous réserve des conditions suivantes:

L'avis de droit d'auteur ci-dessus et cet avis d'autorisation doivent être inclus dans toutes les copies ou parties substantielles du logiciel.

LE LOGICIEL EST FOURNI `` TEL QUEL '', SANS GARANTIE D'AUCUNE SORTE, EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS S'Y LIMITER LES GARANTIES DE QUALITÉ MARCHANDE, D'ADÉQUATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION DE CONTRAT, DE TORT OU D'AUTREMENT, RÉSULTANT DE, HORS OU EN LIEN AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES ACTIONS DANS LE LOGICIEL.