debuggen
Ein kleines JavaScript-Debugging-Dienstprogramm, das der Debugging-Technik des Node.js-Kerns nachempfunden ist. Funktioniert in Node.js und Webbrowsern.
Installation
1$ npm install debug
Verwendung
debug
macht eine Funktion verfügbar; übergeben Sie dieser Funktion einfach den Namen Ihres Moduls und sie gibt eine dekorierte Version von zurück, an die console.error
Sie Debug-Anweisungen übergeben können. Dadurch können Sie die Debug-Ausgabe für verschiedene Teile Ihres Moduls sowie für das Modul umschalten als Ganzes.
Beispiel 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');
Beispiel worker.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();
Die DEBUG
Umgebungsvariable wird dann verwendet, um diese basierend auf durch Leerzeichen oder durch Kommas getrennten Namen zu aktivieren.
Hier sind einige Beispiele:
Windows-Hinweis
Unter Windows wird die Umgebungsvariable mit dem set
Befehl festgelegt.
1set DEBUG=*,-not_this
Beachten Sie, dass PowerShell eine andere Syntax zum Festlegen von Umgebungsvariablen verwendet.
1$env:DEBUG = "*,-not_this"
Führen Sie dann wie gewohnt das zu debuggende Programm aus.
Namespace-Farben
Für jede Debug-Instanz wird basierend auf ihrem Namespace-Namen eine Farbe generiert. Dies hilft beim visuellen Parsen der Debug-Ausgabe, um zu identifizieren, zu welcher Debug-Instanz eine Debug-Zeile gehört.
Node.js
In Node.js sind Farben aktiviert, wenn stderr ein TTY ist. Sie sollten das supports-color
Modul auch zusammen mit Debug installieren, da Debug sonst nur eine kleine Handvoll Grundfarben verwendet.
Webbrowser
Farben sind auch bei „Web-Inspektoren“ aktiviert, die die %c
Formatierungsoption verstehen. Dies sind WebKit-Web-Inspektoren, Firefox ( seit Version 31 ) und das Firebug-Plugin für Firefox (jede Version).
Millisekundendifferenz
Bei der aktiven Entwicklung einer Anwendung kann es nützlich sein, zu sehen, wie viel Zeit zwischen einem debug()
Aufruf und dem nächsten verstrichen ist. Angenommen, Sie rufen debug()
vor dem Anfordern einer Ressource auf und auch danach zeigt Ihnen „+NNNms“ an, wie viel Zeit aufgewendet wurde zwischen Anrufen.
Wenn stdout kein TTY ist, Date#toISOString()
wird es verwendet, was es für die Protokollierung der Debug-Informationen nützlicher macht, wie unten gezeigt:
Konventionen
Wenn Sie dies in einer oder mehreren Ihrer Bibliotheken verwenden, sollten Sie den Namen Ihrer Bibliothek verwenden, damit Entwickler das Debuggen nach Bedarf umschalten können, ohne Namen zu erraten. Wenn Sie mehr als einen Debugger haben, sollten Sie diesen Ihren Bibliotheksnamen und voranstellen Verwenden Sie „:“, um Funktionen zu trennen. Beispielsweise wäre „bodyParser“ von Connect dann „connect:bodyParser“. Wenn Sie am Ende Ihres Namens ein „*“ anhängen, wird es unabhängig von der DEBUG-Einstellung immer aktiviert Umgebungsvariable. Sie können sie dann sowohl für die normale Ausgabe als auch für die Debug-Ausgabe verwenden.
Platzhalter
Das *
Zeichen kann als Platzhalter verwendet werden. Angenommen, Ihre Bibliothek verfügt beispielsweise über Debugger mit den Namen „connect:bodyParser“, „connect:compress“, „connect:session“, anstatt alle drei mit aufzulisten,
DEBUG=connect:bodyParser,connect:compress,connect:session
können Sie einfach
DEBUG=connect:*
, oder ausführen Alles, was dieses Modul verwendet, verwenden Sie einfach DEBUG=*
.
Sie können auch bestimmte Debugger ausschließen, indem Sie ihnen ein „-“-Zeichen voranstellen. Dies würde beispielsweise DEBUG=*,-connect:*
alle Debugger einschließen, außer denen, die mit „connect:“ beginnen.
Umgebungsvariablen
Beim Ausführen von Node.js können Sie einige Umgebungsvariablen festlegen, die das Verhalten der Debug-Protokollierung ändern:
Name | Zweck |
---|---|
DEBUG |
Aktiviert/deaktiviert bestimmte Debugging-Namespaces. |
DEBUG_HIDE_DATE |
Datum aus der Debug-Ausgabe ausblenden (nicht TTY). |
DEBUG_COLORS |
Ob Farben in der Debug-Ausgabe verwendet werden sollen oder nicht. |
DEBUG_DEPTH |
Objektinspektionstiefe. |
DEBUG_SHOW_HIDDEN |
Zeigt versteckte Eigenschaften der untersuchten Objekte an. |
Hinweis: Die Umgebungsvariablen beginnend mit DEBUG_
werden schließlich in ein Optionsobjekt konvertiert, das mit %o
/ %O
-Formattern verwendet wird.
util.inspect()
Die vollständige Liste finden Sie in der Node.js-Dokumentation.
Formatierer
Debug verwendet Formatierungen im Printf-Stil . Nachfolgend sind die offiziell unterstützten Formatierer aufgeführt:
Formatierer | Darstellung |
---|---|
%O |
Drucken Sie ein Objekt hübsch in mehreren Zeilen aus. |
%o |
Drucken Sie ein Objekt hübsch in einer einzigen Zeile aus. |
%s |
Zeichenfolge. |
%d |
Zahl (sowohl Ganzzahl als auch Gleitkommazahl). |
%j |
JSON. Wird durch die Zeichenfolge „[Circular]“ ersetzt, wenn das Argument Zirkelverweise enthält. |
%% |
Einzelnes Prozentzeichen („%“). Dies verbraucht kein Argument. |
Custom formatters
Sie können benutzerdefinierte Formatierer hinzufügen, indem Sie das debug.formatters
Objekt erweitern. Wenn Sie beispielsweise Unterstützung für die Darstellung eines Puffers als Hex mit hinzufügen möchten
%h
, können Sie Folgendes tun:
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
Browser-Unterstützung
Sie können mit browserify ein browserfähiges Skript erstellen oder einfach den Browserify-as-a-Service- Build verwenden , wenn Sie es nicht selbst erstellen möchten.
Der Aktivierungsstatus von Debug wird derzeit von beibehalten localStorage
. Stellen Sie sich die unten gezeigte Situation vor, in der Sie worker:a
und haben worker:b
und beide debuggen möchten. Sie können dies aktivieren, indem Sie Folgendes verwenden localStorage.debug
:
1localStorage.debug = 'worker:*'
Und aktualisieren Sie dann die Seite.
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);
Ausgabeströme
Standardmäßig debug
erfolgt die Protokollierung bei stderr, dies kann jedoch pro Namespace konfiguriert werden, indem die log
Methode überschrieben wird:
Beispiel 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');
Dynamisch einstellen
Sie können das Debuggen auch dynamisch aktivieren, indem Sie die enable()
Methode aufrufen:
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'));
drucken:
1
2
31 false
2 true
3 false
Verwendung: enable(namespaces)
namespaces
Kann durch einen Doppelpunkt und Platzhalter getrennte Modi enthalten.
Beachten Sie, dass der Aufruf enable()
die zuvor festgelegte DEBUG-Variable vollständig überschreibt:
1
2$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))'
=> false
Prüfen, ob ein Debug-Ziel aktiviert ist
Nachdem Sie eine Debug-Instanz erstellt haben, können Sie feststellen, ob sie aktiviert ist, indem Sie die enabled
Eigenschaft überprüfen:
1
2
3
4
5const debug = require('debug')('http');
if (debug.enabled) {
// do stuff...
}
Sie können diese Eigenschaft auch manuell umschalten, um die Aktivierung oder Deaktivierung der Debug-Instanz zu erzwingen.
Autoren
- TJ Holowaychuk
- Nathan Rajlich
- Andrew Rhyne
Unterstützer
Unterstützen Sie uns mit einer monatlichen Spende und helfen Sie uns, unsere Aktivitäten fortzusetzen. [ Werden Sie Unterstützer ]
Sponsoren
Werden Sie Sponsor und erhalten Sie Ihr Logo in unserer README-Datei auf Github mit einem Link zu Ihrer Website. [ Werden Sie Sponsor ]
Lizenz
(Die MIT-Lizenz)
Copyright (c) 2014-2017 TJ Holowaychuk <tj@vision-media.ca>
Hiermit wird jeder Person, die eine Kopie dieser Software und der zugehörigen Dokumentationsdateien (die „Software“) erhält, kostenlos die Erlaubnis erteilt, mit der Software ohne Einschränkung zu handeln, einschließlich und ohne Einschränkung der Rechte zur Nutzung, zum Kopieren, Ändern und Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und Personen, denen die Software zur Verfügung gestellt wird, dies zu gestatten, vorbehaltlich der folgenden Bedingungen:
Der obige Urheberrechtshinweis und dieser Genehmigungshinweis müssen in allen Kopien oder wesentlichen Teilen der Software enthalten sein.
DIE SOFTWARE WIRD „WIE BESEHEN“ ZUR VERFÜGUNG GESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNG DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND DER NICHTVERLETZUNG. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHT-INHABER FÜR JEGLICHE HAFTUNG ANSPRÜCHE, SCHÄDEN ODER ANDERE HAFTUNG, SEI ES AUS EINER VERTRAGLICHEN HANDLUNG, AUS unerlaubter Handlung ODER ANDERWEITIG, DIE SICH AUS, AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN MIT DER SOFTWARE ERGEBEN.