debuggen
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
debug
geeft een functie weer. Geef deze functie gewoon de naam van uw module door en er wordt een gedecoreerde versie geretourneerd waaraan console.error
u 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
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');
Voorbeeld 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();
De DEBUG
omgevingsvariabele wordt vervolgens gebruikt om deze in te schakelen op basis van door spaties of door komma's gescheiden namen.
Hier zijn enkele voorbeelden:
Windows-opmerking
In Windows wordt de omgevingsvariabele ingesteld met behulp van de set
opdracht.
1set 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-color
module ook naast debug installeren, anders gebruikt debug slechts een klein handvol basiskleuren.
Webbrowser
Kleuren zijn ook ingeschakeld op "Web Inspectors" die de %c
opmaakoptie 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:session
kunt 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
/ %O
formatters. 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.formatters
object 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
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
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:a
en heeft worker:b
en u wilt beide debuggen. U kunt dit inschakelen met localStorage.debug
:
1localStorage.debug = 'worker:*'
En ververs vervolgens de pagina.
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);
Uitvoerstromen
Standaard debug
wordt ingelogd op stderr, maar dit kan per naamruimte worden geconfigureerd door de log
methode te overschrijven:
Voorbeeld 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 ingesteld
U kunt foutopsporing ook dynamisch inschakelen door de enable()
methode aan te roepen:
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'));
afdrukken:
1
2
31 false
2 true
3 false
Gebruik: enable(namespaces)
namespaces
kan 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 enabled
eigenschap te controleren:
1
2
3
4
5const 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.