Geweldige gemeenschapsmodule

debuggen

Bouwstatus Dekkingsstatus Slank OpenCollectief OpenCollectief

Een klein hulpprogramma voor foutopsporing in JavaScript, gemodelleerd naar de foutopsporingstechniek van de kern van Node.js. Werkt in Node.js en webbrowsers.

Installatie

1
$ npm install debug

Gebruik

debuggeeft een functie weer. Geef deze functie gewoon de naam van uw module door en er wordt een gedecoreerde versie geretourneerd waaraan console.erroru debug-instructies kunt doorgeven. Hierdoor kunt u de debug-uitvoer voor verschillende delen van uw module en voor de module omschakelen Als geheel.

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

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

De DEBUGomgevingsvariabele wordt vervolgens gebruikt om deze in te schakelen op basis van door spaties of door komma's gescheiden namen.

Hier zijn enkele voorbeelden:

screenshot 08-08-2017 om 12 53 04 pm schermafdruk 08-08-2017 om 12 53 38 uur screenshot 08-08-2017 om 12 53 25 uur

Windows-opmerking

In Windows wordt de omgevingsvariabele ingesteld met behulp van de setopdracht.

1
set DEBUG=*,-not_this

Houd er rekening mee dat PowerShell verschillende syntaxis gebruikt om omgevingsvariabelen in te stellen.

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

Voer vervolgens het programma uit waarvan u fouten wilt opsporen, zoals gewoonlijk.

Naamruimtekleuren

Voor elke debug-instantie wordt een kleur gegenereerd op basis van de naamruimtenaam. Dit helpt bij het visueel parseren van de debug-uitvoer om te identificeren tot welke debug-instantie een debug-regel behoort.

Knooppunt.js

In Node.js zijn kleuren ingeschakeld als stderr een TTY is. Je moet de supports-colormodule ook naast debug installeren, anders gebruikt debug slechts een klein handvol basiskleuren.

Webbrowser

Kleuren zijn ook ingeschakeld op "Web Inspectors" die de %copmaakoptie begrijpen. Dit zijn WebKit-webinspecteurs, Firefox ( sinds versie 31 ) en de Firebug-plug-in voor Firefox (elke versie).

Milliseconde verschil

Bij het actief ontwikkelen van een applicatie kan het handig zijn om te zien hoeveel tijd er tussen het ene debug()gesprek en het volgende zit. Stel dat u een beroep doet debug()voordat u een bron aanvraagt, en ook daarna laat de "+NNNms" zien hoeveel tijd er is besteed tussen gesprekken.

Wanneer stdout geen TTY is, Date#toISOString()wordt deze gebruikt, waardoor het nuttiger wordt voor het loggen van de foutopsporingsinformatie, zoals hieronder weergegeven:

Conventies

Als u dit in een of meer van uw bibliotheken gebruikt, moet u de naam van uw bibliotheek gebruiken, zodat ontwikkelaars de foutopsporing naar wens kunnen in- en uitschakelen zonder namen te raden. Als u meer dan één foutopsporingsprogramma heeft, moet u deze vooraf laten gaan door uw bibliotheeknaam en gebruik "bodyParser" uit Connect zou dan "connect:bodyParser" zijn. Als u een "*" aan het einde van uw naam toevoegt, wordt deze altijd ingeschakeld, ongeacht de instelling van DEBUG omgevingsvariabele. U kunt deze vervolgens gebruiken voor normale uitvoer en voor het debuggen van uitvoer.

Wildcards

Het *teken kan als jokerteken worden gebruikt. Stel dat uw bibliotheek bijvoorbeeld debuggers heeft met de naam 'connect:bodyParser', 'connect:compress', 'connect:session'. In plaats van ze alle drie met te vermelden, DEBUG=connect:bodyParser,connect:compress,connect:sessionkunt u eenvoudigweg doen DEBUG=connect:*of uitvoeren alles wat deze module gebruikt, gebruikt u gewoon DEBUG=*.

U kunt ook specifieke debuggers uitsluiten door ze vooraf te laten gaan door een '-'-teken. Hiermee DEBUG=*,-connect:*worden bijvoorbeeld alle debuggers opgenomen, behalve degene die beginnen met 'connect:'.

Omgevingsvariabelen

Wanneer u Node.js doorloopt, kunt u een aantal omgevingsvariabelen instellen die het gedrag van de foutopsporingsregistratie zullen veranderen:

Naam Doel
DEBUG Schakelt specifieke foutopsporingsnaamruimten in/uit.
DEBUG_HIDE_DATE Datum verbergen voor foutopsporingsuitvoer (niet-TTY).
DEBUG_COLORS Of er wel of niet kleuren moeten worden gebruikt in de foutopsporingsuitvoer.
DEBUG_DEPTH Inspectiediepte van object.
DEBUG_SHOW_HIDDEN Toont verborgen eigenschappen van geïnspecteerde objecten.

Opmerking: de omgevingsvariabelen die beginnen met DEBUG_worden uiteindelijk geconverteerd naar een Options-object dat wordt gebruikt met %o/ %Oformatters. Zie de Node.js-documentatie util.inspect() voor de volledige lijst.

Formatters

Debug gebruikt opmaak in printf-stijl . Hieronder staan ​​de officieel ondersteunde formatteringen:

Formatter Vertegenwoordiging
%O Print een object mooi af op meerdere regels.
%o Print een object mooi af op één enkele regel.
%s Snaar.
%d Getal (zowel geheel getal als float).
%j JSON. Vervangen door de tekenreeks '[Circular]' als het argument kringverwijzingen bevat.
%% Enkel procentteken ('%'). Dit kost geen argument.

Custom formatters

U kunt aangepaste formatters toevoegen door het debug.formattersobject uit te breiden. Als u bijvoorbeeld ondersteuning wilt toevoegen voor het weergeven van een buffer als hex met %h, kunt u iets doen als:

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

Browserondersteuning

U kunt een browserklaar script bouwen met browserify , of u kunt gewoon de browserify-as-a-service build gebruiken als u het niet zelf wilt bouwen.

De inschakelstatus van debuggen wordt momenteel gehandhaafd door localStorage. Bekijk de onderstaande situatie waarin u worker:aen heeft worker:ben u wilt beide debuggen. U kunt dit inschakelen met localStorage.debug:

1
localStorage.debug = 'worker:*'

En ververs vervolgens de pagina.

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

Uitvoerstromen

Standaard debugwordt ingelogd op stderr, maar dit kan per naamruimte worden geconfigureerd door de logmethode te overschrijven:

Voorbeeld 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 ingesteld

U kunt foutopsporing ook dynamisch inschakelen door de enable()methode aan te roepen:

1 2 3 4 5 6 7 8 9
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'));

afdrukken:

1 2 3
1 false 2 true 3 false

Gebruik:
enable(namespaces)
namespaceskan modi bevatten, gescheiden door een dubbele punt en jokertekens.

Houd er rekening mee dat het aanroepen enable()de eerder ingestelde DEBUG-variabele volledig overschrijft:

1 2
$ DEBUG=foo node -e 'var dbg = require("debug"); dbg.enable("bar"); console.log(dbg.enabled("foo"))' => false

Controleren of een foutopsporingsdoel is ingeschakeld

Nadat u een foutopsporingsinstantie heeft gemaakt, kunt u bepalen of deze al dan niet is ingeschakeld door de enabledeigenschap te controleren:

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

U kunt deze eigenschap ook handmatig in- of uitschakelen om te forceren dat de foutopsporingsinstantie wordt in- of uitgeschakeld.

Auteurs

  • TJ Holowaychuk
  • Nathan Rajlich
  • Andreas Rhyne

Steuners

Steun ons met een maandelijkse donatie en help ons onze activiteiten voort te zetten .

Sponsoren

Word sponsor en plaats uw logo op onze README op Github met een link naar uw site .

Licentie

(De MIT-licentie)

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

Hierbij wordt gratis toestemming verleend aan elke persoon die een kopie van deze software en bijbehorende documentatiebestanden (de 'Software') verkrijgt, om zonder beperking in de Software te handelen, inclusief maar niet beperkt tot de rechten om te gebruiken, kopiëren, wijzigen, samenvoegen publiceren, distribueren, in sublicentie geven en/of kopieën van de Software verkopen, en personen aan wie de Software wordt geleverd toestemming geven om dit te doen, met inachtneming van de volgende voorwaarden:

De bovenstaande copyrightkennisgeving en deze toestemmingsverklaring zullen worden opgenomen in alle kopieën of substantiële delen van de Software.

DE SOFTWARE WORDT GELEVERD 'AS IS', ZONDER ENIGE GARANTIE, EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN NIET-INBREUK. IN GEEN GEVAL ZULLEN DE AUTEURS OF HOUDERS VAN HET AUTEURSRECHT AANSPRAKELIJK ZIJN VOOR ENIGE CLAIM, SCHADE OF ANDERE AANSPRAKELIJKHEID, HETZIJ IN EEN CONTRACTGEDING, ONRECHTMATIGE DAAD OF ANDERSZINS, VOORTVLOEIEND UIT, UIT OF IN VERBAND MET DE SOFTWARE OF HET GEBRUIK OF ANDERE HANDELINGEN IN DE SOFTWARE.