Fantastisches Community-Modul

debuggen

Build-Status Abdeckungsstatus Schlaff OpenCollective OpenCollective

Ein winziges 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. console.error Sie dieser Funktion einfach den Namen Ihres Moduls und es wird eine dekorierte Version von console.error an die Sie Debug-Anweisungen übergeben können. Auf diese Weise können Sie die Debug-Ausgabe für verschiedene Teile Ihres Moduls als console.error sowie das Modul 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 Umgebungsvariable DEBUG wird dann verwendet, um diese basierend auf durch Leerzeichen oder Kommas getrennten Namen zu aktivieren.

Hier einige Beispiele:

Screenshot 08.08.2017 um 12 53 04 UhrScreenshot 08.08.2017 um 12 53 38 UhrScreenshot 08.08.2017 um 12 53 25 Uhr

Windows Hinweis

Unter Windows wird die Umgebungsvariable mit dem Befehl set set .

1
set DEBUG=*,-not_this

Beachten Sie, dass PowerShell unterschiedliche Syntax zum Festlegen von Umgebungsvariablen verwendet.

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. Dies hilft beim visuellen Parsen der Debug-Ausgabe, um festzustellen, zu welcher Debug-Instanz eine Debug-Zeile gehört.

Node.js

In Node.js sind Farben aktiviert, wenn stderr ein TTY ist. Sie sollten neben dem Debuggen auch das supports-color Modul installieren, da sonst beim Debuggen nur eine kleine Handvoll Grundfarben verwendet werden.

Webbrowser

Farben sind auch in "Web Inspectors" aktiviert, die die Formatierungsoption %c verstehen. Dies sind WebKit-Webinspektoren, Firefox ( seit Version 31 ) und das Firebug-Plugin für Firefox (jede Version).

Millisekunden Diff

Wenn Sie eine Anwendung aktiv entwickeln, kann es hilfreich sein zu sehen, wann die Zeit zwischen einem Aufruf von debug() und dem nächsten verbracht wird. Angenommen, Sie rufen debug() bevor Sie eine Ressource anfordern, und danach wird "+ NNNms" angezeigt Sie, wie viel Zeit zwischen den Anrufen verbracht wurde.

Wenn stdout kein TTY ist, wird Date#toISOString() verwendet, um die Debug-Informationen wie Date#toISOString() 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 und voranstellen Verwenden Sie ":", um Funktionen zu trennen. Beispiel: "bodyParser" von "Connect" lautet dann "connect: bodyParser". Wenn Sie am Ende Ihres Namens ein "*" anhängen, wird es unabhängig von der Einstellung des DEBUG 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 DEBUG=connect:bodyParser,connect:compress,connect:session , Sie können einfach DEBUG=connect:* ausführen, oder um alles mit diesem Modul auszuführen, verwenden Sie einfach DEBUG=* .

Sie können bestimmte Debugger auch ausschließen, indem Sie ihnen ein "-" voranstellen. Beispielsweise würde DEBUG=*,-connect:* alle Debugger außer denen einschließen, 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 vor Debug-Ausgabe ausblenden (nicht TTY).
DEBUG_COLORS Gibt an, ob Farben in der Debug-Ausgabe verwendet werden sollen.
DEBUG_DEPTH Objektinspektionstiefe.
DEBUG_SHOW_HIDDEN Zeigt versteckte Eigenschaften für inspizierte Objekte an.

Hinweis: Die Umgebungsvariablen, die mit DEBUG_ , werden schließlich in ein DEBUG_ konvertiert, das mit %o / %O Formatierern verwendet wird. Die vollständige Liste finden Sie in der Node.js-Dokumentation für util.inspect() .

Formatierer

Das Debuggen verwendet die Formatierung im Printf-Stil . Nachfolgend sind die offiziell unterstützten Formatierer aufgeführt:

Formatierer Vertretung
%O Drucken Sie ein Objekt in mehreren Zeilen.
%o Drucken Sie ein Objekt in einer einzigen Zeile.
%s String.
%d Zahl (sowohl Ganzzahl als auch Gleitkommawert).
%j JSON. Ersetzt durch die Zeichenfolge '[Circular]', wenn das Argument Zirkelverweise enthält.
%% Ein einzelnes Prozentzeichen ('%'). Dies verbraucht kein Argument.

Custom formatters

Sie können benutzerdefinierte Formatierer hinzufügen, indem Sie das Objekt debug.formatters . Wenn Sie beispielsweise Unterstützung für das Rendern eines Puffers als Hex mit %h hinzufügen debug.formatters , können Sie debug.formatters 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 den browserify-as-a-Service- Build verwenden , wenn Sie es nicht selbst erstellen möchten.

Der Aktivierungsstatus des localStorage wird derzeit von localStorage . Betrachten Sie die unten gezeigte Situation, in der Sie worker:a und worker:b , und möchten beide debuggen. Sie können dies mit 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 wird das debug bei stderr protokolliert. Dies kann jedoch pro Namespace konfiguriert werden, indem die log ü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 enable() indem Sie die Methode enable() 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)
namespaces können Modi enthalten, die durch einen Doppelpunkt und Platzhalter getrennt sind.

Beachten Sie, dass der Aufruf von 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

Überprü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 Eigenschaft enabled :

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

Sie können diese Eigenschaft auch manuell umschalten, um zu erzwingen, dass die Debug-Instanz aktiviert oder deaktiviert wird.

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 ein 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, uneingeschränkt mit der Software umzugehen, einschließlich, jedoch nicht beschränkt auf die Rechte zur Nutzung, zum Kopieren, Ändern, Zusammenführen , veröffentlichen, vertreiben, unterlizenzieren und / oder verkaufen Kopien der Software und erlauben Personen, denen die Software zur Verfügung gestellt wird, dies unter den folgenden Bedingungen:

Der oben genannte Copyright-Hinweis und dieser Genehmigungshinweis sind in allen Kopien oder wesentlichen Teilen der Software enthalten.

DIE SOFTWARE WIRD "WIE BESEHEN" OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GEWÄHRLEISTUNG ZUR VERFÜGUNG GESTELLT, EINSCHLIESSLICH DER GEWÄHRLEISTUNG FÜR MARKTGÄNGIGKEIT, EIGNUNG FÜR EINEN BESTIMMTEN ZWECK UND NICHT VERLETZUNGSBEDINGUNGEN ANSPRUCH, SCHÄDEN ODER ANDERE HAFTUNG, OB BEI VERTRAGS-, TORT- ODER ANDERWEITIGEN MASSNAHMEN, DIE AUS, AUS ODER IM ZUSAMMENHANG MIT DER SOFTWARE ODER DER NUTZUNG ODER ANDEREN HANDELN IN DER SOFTWARE ENTSTEHEN.