déboguer
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
debug
expose une fonction ; transmettez simplement à cette fonction le nom de votre module, et elle renverra une version décorée de console.error
à laquelle vous pourrez transmettre les instructions de débogage. Cela vous permettra de basculer la sortie de débogage pour différentes parties de votre module ainsi que pour 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
18var 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 de travailleur.js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var 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 DEBUG
variable 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:
Remarque Windows
Sous Windows, la variable d'environnement est définie à l'aide de la set
commande.
1set 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 appartient une ligne de débogage.
Noeud.js
Dans Node.js, les couleurs sont activées lorsque stderr est un TTY. Vous devez également installer le supports-color
module avec le débogage, sinon le débogage n'utilisera qu'une petite poignée de couleurs de base.
Navigateur Web
Les couleurs sont également activées sur les "Inspecteurs Web" qui comprennent l' %c
option de formatage. Il s'agit des inspecteurs Web WebKit, Firefox ( depuis la version 31 ) et le plugin Firebug pour Firefox (n'importe quelle version).
Différent en millisecondes
Lors du développement actif d'une application, il peut être utile de voir le temps passé entre un debug()
appel et le suivant. Supposons par exemple que vous invoquiez 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 enregistrer les informations de débogage, comme indiqué ci-dessous :
Conventions
Si vous l'utilisez dans une ou plusieurs de vos bibliothèques, vous devez utiliser le nom de votre bibliothèque afin que les développeurs puissent basculer le débogage comme ils le souhaitent sans deviner les noms. Si vous avez plusieurs débogueurs, vous devez les préfixer avec le nom de votre 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 d'un caractère "-". Par exemple, cela DEBUG=*,-connect:*
inclurait tous les débogueurs à l'exception de ceux commençant par "connect:".
Variables d'environnement
Lors de l'exécution via Node.js, vous pouvez définir quelques variables d'environnement qui modifieront le comportement de la journalisation de débogage :
Nom | But |
---|---|
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 |
S'il faut ou non utiliser des 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
util.inspect()
pour la liste complète.
Formateurs
Debug utilise un formatage de style printf . Vous trouverez ci-dessous 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 « [Circulaire] » 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.formatters
objet. 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
9const 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 créer un script prêt pour le navigateur à l'aide de browserify , ou simplement utiliser la version browserify-as-a-service , si vous ne souhaitez pas le créer vous-même.
L'état d'activation du débogage est actuellement conservé par localStorage
. Considérez la situation ci-dessous dans laquelle vous avez worker:a
et worker:b
, et souhaitez déboguer les deux. Vous pouvez l'activer en utilisantlocalStorage.debug
:
1localStorage.debug = 'worker:*'
Et puis actualisez la page.
1
2
3
4
5
6
7
8
9
10a = 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, debug
la connexion sera enregistrée sur stderr, mais cela peut être configuré par espace de noms en remplaçant la log
méthode :
Exemple stdout.js :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17var 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
9let 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
31 false
2 true
3 false
Utilisation : enable(namespaces)
namespaces
peut 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 enabled
propriété :
1
2
3
4
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
Vous pouvez également activer ou désactiver manuellement cette propriété pour forcer l'activation ou la désactivation de l'instance de débogage.
Auteurs
- TJ Holowaychuk
- Nathan Rajlich
- Andrew 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 accordée par la présente, gratuitement, à toute personne obtenant une copie de ce logiciel et des fichiers de documentation associés (le « Logiciel »), d'utiliser le Logiciel sans restriction, y compris, sans limitation, les droits d'utilisation, de copie, de modification, de fusion. , publier, distribuer, accorder des sous-licences 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 LIMITATION LES GARANTIES DE QUALITÉ MARCHANDE, D'ADAPTATION À UN USAGE PARTICULIER ET DE NON-VIOLATION. EN AUCUN CAS LES AUTEURS OU LES TITULAIRES DES DROITS D'AUTEUR NE SERONT RESPONSABLES DE QUELQUE QUELQUE CAS RÉCLAMATION, DOMMAGES OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION CONTRACTUELLE, DÉLIT OU AUTRE, DÉCOULANT DE, OU EN RELATION AVEC LE LOGICIEL OU L'UTILISATION OU D'AUTRES AFFAIRES DANS LE LOGICIEL.