Module communautaire génial

déboguer

État de la construction État de la couverture Mou OuvertCollectif OuvertCollectif

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

Installation

1
$ npm install debug

Usage

debugexpose une fonction ; transmettez simplement à cette fonction le nom de votre module, et elle renverra une version décorée de console.errorpour que vous puissiez passer des instructions de débogage. Cela vous permettra de basculer la sortie de débogage pour différentes parties de votre module 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 DEBUGvariable d'environnement est ensuite utilisée pour les activer en fonction de noms délimités par des espaces ou des virgules.

Voici quelques exemples:

capture d'écran 08/08/2017 à 12h53 04h capture d'écran 08/08/2017 à 12 53 38 h capture d'écran 08/08/2017 à 12 53 25 h

Remarque sur les fenêtres

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

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 aide lors de l'analyse visuelle de la sortie de débogage pour identifier à quelle instance de débogage une ligne de débogage appartient.

Node.js

En Node.js, les couleurs sont activés lorsque stderr est un ATS. Vous aussi devez installer le supports-colormodule de débogage à côté, 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' %coption de formatage. 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 debug()appel et le suivant. Supposons par exemple que vous appeliez debug()avant de demander une ressource, et après également, le "+NNNms" vous montrera 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 consigner les 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éfixer 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 pour 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 ait 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 exécuter tout ce qui utilise ce module utilise 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

Lorsque vous exécutez Node.js, vous pouvez définir quelques variables d'environnement qui modifieront le comportement de la journalisation de débogage :

Nom Objectif
DEBUG Active/désactive des espaces de noms de débogage spécifiques.
DEBUG_HIDE_DATE Masquer la date de la sortie de débogage (non TTY).
DEBUG_COLORS S'il faut ou non utiliser des couleurs dans la sortie de débogage.
DEBUG_DEPTH Profondeur d'inspection d'objet.
DEBUG_SHOW_HIDDEN Affiche les propriétés masquées des 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 util.inspect() pour la liste complète.

Formateurs

Le débogage utilise un formatage de style printf . Vous trouverez ci-dessous les formateurs officiellement pris en charge :

Formateur Représentation
%O Jolie-imprime 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' debug.formattersobjet. Par exemple, si vous souhaitez ajouter la prise en charge du rendu d'un tampon sous forme hexadécimale 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 du débogage est actuellement conservé par localStorage. Considérez la situation ci-dessous où vous avez worker:aet worker:b, et souhaitez déboguer les deux. Vous pouvez l'activer en utilisantlocalStorage.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, il debugse connectera à stderr, mais cela peut être configuré par espace de noms en remplaçant la logméthode :

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

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

imprimer:

1 2 3
1 false 2 true 3 false

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

Notez que l'appel 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 enabledpropriété :

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

Vous pouvez également basculer manuellement cette propriété pour forcer l'activation ou la désactivation de l'instance de débogage.

Auteurs

  • TJ Holowaychuk
  • Nathan Rajlich
  • André Rhyne

Bailleurs de fonds

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

Commanditaires

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

Licence

(La licence MIT)

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

L'autorisation est par les présentes 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, concéder en sous-licence et/ou vendre des copies du Logiciel, et permettre aux personnes auxquelles 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 NON LIMITÉ AUX GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET D'ABSENCE DE CONTREFAÇON. DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLICTUELLE OU AUTRE, DÉCOULANT DE, OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES OPÉRATIONS DANS LE LOGICIEL.