Tolles Community-Modul

debuggen

Build-Status Abdeckungsstatus Locker OpenCollective OpenCollective

Ein kleines JavaScript-Debugging-Dienstprogramm, das der Debugging-Technik des Node.js-Kerns nachempfunden ist und in Node.js und Webbrowsern funktioniert.

Installation

1
$ npm install debug

Verwendung

debugmacht eine Funktion verfügbar; übergeben Sie dieser Funktion einfach den Namen Ihres Moduls, und sie gibt eine dekorierte Version von zurück, console.erroran die Sie Debug-Anweisungen übergeben können. Dadurch können Sie die Debug-Ausgabe für verschiedene Teile Ihres Moduls sowie des Moduls umschalten als Ganzes.

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

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

Die DEBUGUmgebungsvariable wird dann verwendet, um diese basierend auf Leerzeichen oder durch Kommas getrennten Namen zu aktivieren.

Hier sind einige Beispiele:

Screenshot 2017-08-08 at 12 53 04 pm Screenshot 2017-08-08 um 12 53 38 Uhr Screenshot 2017-08-08 um 12 53 25 Uhr

Windows-Hinweis

Unter Windows wird die Umgebungsvariable mit dem setBefehl gesetzt.

1
set DEBUG=*,-not_this

Beachten Sie, dass PowerShell eine andere Syntax verwendet, um Umgebungsvariablen festzulegen.

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

Führen Sie dann das zu debuggende Programm wie gewohnt aus.

Namespace-Farben

Für jede Debug-Instanz wird basierend auf ihrem Namespace-Namen eine Farbe generiert, die beim visuellen Analysieren der Debug-Ausgabe hilft, zu erkennen, 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-colorModul auch zusammen mit Debug installieren , da Debug sonst nur eine kleine Handvoll Grundfarben verwendet.

Webbrowser

Farben sind auch auf "Web Inspectors" aktiviert, die die %cFormatierungsoption verstehen . Dies sind WebKit Web Inspectors, Firefox ( seit Version 31 ) und das Firebug-Plugin für Firefox (beliebige Version).

Millisekundendifferenz

Bei der aktiven Entwicklung einer Anwendung kann es nützlich sein zu sehen, wann die Zeit zwischen einem debug()Aufruf und dem nächsten debug()verstrichen ist.Angenommen, Sie rufen vor der Anforderung einer Ressource auf und auch danach zeigen die "+NNNms" an, wie viel Zeit verbracht wurde zwischen Anrufen.

Wenn stdout kein TTY ist, Date#toISOString()wird verwendet, um die Debug-Informationen wie unten gezeigt zu protokollieren:

Konventionen

Wenn Sie dies in einer oder mehreren Ihrer Bibliotheken verwenden, sollten Sie den Namen Ihrer Bibliothek verwenden, damit Entwickler das Debuggen wie gewünscht umschalten können, ohne Namen zu erraten.Wenn Sie mehr als einen Debugger haben, sollten Sie ihnen Ihren Bibliotheksnamen voranstellen und verwenden Sie ":", um Funktionen zu trennen. Beispielsweise wäre "bodyParser" von Connect dann "connect:bodyParser". Wenn Sie ein "*" an das Ende Ihres Namens anhängen, wird es immer aktiviert, unabhängig von der Einstellung des DEBUG 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 enthält Debugger namens "connect:bodyParser", "connect:compress", "connect:session", anstatt alle drei mit aufzulisten DEBUG=connect:bodyParser,connect:compress,connect:session, können Sie einfach tun DEBUG=connect:*oder ausführen alles mit diesem Modul einfach verwenden DEBUG=*.

Sie können auch bestimmte Debugger ausschließen, indem Sie ihnen ein "-"-Zeichen voranstellen. Zum Beispiel DEBUG=*,-connect:*alle Debugger 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 Debug-Ausgabe ausblenden (Nicht-TTY).
DEBUG_COLORS Ob Farben in der Debug-Ausgabe verwendet werden sollen oder nicht.
DEBUG_DEPTH Objektprüftiefe.
DEBUG_SHOW_HIDDEN Zeigt ausgeblendete Eigenschaften von untersuchten Objekten an.

Hinweis: Die Umgebungsvariablen, die mit beginnen DEBUG_, werden in ein Options-Objekt konvertiert, das mit %o/ %O-Formatierern verwendet wird. Eine util.inspect() vollständige Liste finden Sie in der Node.js-Dokumentation .

Formatierer

Debug verwendet eine Formatierung im printf-Stil . Nachfolgend sind die offiziell unterstützten Formatierer aufgeführt:

Formatierer Darstellung
%O Drucken Sie ein Objekt hübsch auf mehreren Zeilen aus.
%o Drucken Sie ein Objekt hübsch in einer einzigen Zeile aus.
%s Zeichenfolge.
%d Zahl (sowohl Integer als auch Float).
%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.formattersObjekt erweitern.Wenn Sie beispielsweise Unterstützung für das Rendern eines Puffers als Hex mit hinzufügen möchten %h, können Sie Folgendes tun:

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

Browser-Unterstützung

Sie können ein browserfähiges Skript mit browserify erstellen oder einfach browserify-as-a-service build verwenden , wenn Sie es nicht selbst erstellen möchten.

Der Aktivierungsstatus von Debug wird derzeit von beibehalten localStorage. Betrachten Sie die unten gezeigte Situation, in der Sie worker:aund haben und worker:bbeide debuggen möchten. Sie können dies mit aktivieren localStorage.debug:

1
localStorage.debug = 'worker:*'

Und dann aktualisieren Sie die Seite.

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

Ausgabestreams

Standardmäßig debugwird bei stderr protokolliert, dies kann jedoch pro Namespace konfiguriert werden, indem die logMethode überschrieben wird:

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

Dynamisch einstellen

Sie können das Debuggen auch dynamisch aktivieren, indem Sie die enable()Methode aufrufen :

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

drucken:

1 2 3
1 false 2 true 3 false

Verwendung:
enable(namespaces)
namespaceskann Modi enthalten, die durch einen Doppelpunkt und Platzhalter getrennt sind.

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 oder nicht, indem Sie die enabledEigenschaft überprüfen :

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

Sie können diese Eigenschaft auch manuell umschalten, um das Aktivieren oder Deaktivieren der Debug-Instanz zu erzwingen.

Autoren

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andrew Rhyne

Unterstützer

Unterstützen Sie uns mit einer monatlichen Spende und helfen uns , unsere Aktivitäten fortsetzen. [ Werden Sie backer ]

Sponsoren

Werden Sie Sponsor und erhalten Sie Ihr Logo auf unserer README 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, Zusammenführen , Kopien der Software zu veröffentlichen, zu verteilen, unterzulizenzieren und/oder zu verkaufen und dies den Personen, denen die Software zur Verfügung gestellt wird, 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 OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG BEREITGESTELLT, EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GEWÄHRLEISTUNGEN DER MARKTFÄHIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHTVERLETZUNG DER VERLETZUNG. SCHÄDEN ODER SONSTIGE HAFTUNG, OB AUS VERTRAGSHANDELN, SCHÄDEN ODER ANDERWEITIG, DIE AUS, AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN MIT DER SOFTWARE ENTSTEHEN.