Debugging met Node.js

Ik ben van mening dat debuggen net zo'n cruciaal onderdeel is van de ontwikkelingscyclus als alle andere. Het is dus altijd een goede gewoonte om het debuggen te ontraadselen, het gemakkelijker en minder tijdrovend te maken, zodat we op tijd het werk kunnen beëindigen en stress kunnen verminderen. 

Zoals de meerderheid van de talen die er zijn, biedt Node enkele uitstekende tools voor foutopsporing waarmee defecten in code gemakkelijk kunnen worden gevonden en opgelost. Ik ben altijd voorstander van het gebruik van een debugger, omdat ik persoonlijk vind dat het gebruik van debuggers echt de noodzaak voor giswerk elimineert en ons betere ontwikkelaars in het algemeen maakt. 

Deze handleiding is voor ontwikkelaars en beheerders die al met Node werken. Het veronderstelt een fundamenteel begrip van de taal op praktisch niveau.

De Debugger gebruiken

Node.js bevat een volledig uitgerust foutopsporingshulpprogramma dat toegankelijk is via een eenvoudig TCP-protocol en een ingebouwde debug-client.

Bijvoorbeeld om de debugger te gebruiken om een ​​bestand met de naam te debuggen script.js, u kunt eenvoudig het knooppunt bellen met behulp van de debug vlag als zodanig:

$ node debug script.js < debugger listening on port 5858 connecting… ok debug>

breekpunten

Nu dat je een foutopsporingssessie hebt gestart, overal in je script die je belt debugger van zal een breekpunt zijn voor de debugger. 

Laten we bijvoorbeeld een debugger-statement toevoegen aan script.js:

foo = 2; setTimeout (() => debugger; console.log ('bugger');, 1000); console.log ( 'de');

Als we nu dit script uitvoeren, wordt de debugger aangeroepen op ons breekpunt en kunnen we het scriptbeheer regelen via de cont of volgende commando's (c of n in het kort).

We kunnen de uitvoering van het script op elk gewenst moment onderbreken met behulp van p.

$ node debug script.js < debugger listening on port 5858 connecting… ok break in /home/tom/web/envatodebug/myscript.js:1 1 foo = 5; 2 setTimeout(() => 3 debugger; debug> cont < de break in /home/tom/web/envatodebug/myscript.js:3 1 foo = 5; 2 setTimeout(() => 3 debugger; 4 console.log ('bugger'); 5, 1000); debug> volgende pauze in /home/tom/web/envatodebug/myscript.js:4 2 setTimeout (() => 3 debugger; 4 console.log ('bugger'); 5, 1000); 6 console.log ('de'); debug> volgende < bugger break in /home/tom/web/envatodebug/myscript.js:5 3 debugger; 4 console.log('bugger'); 5 , 1000); 6 console.log('de'); 7 debug> ophouden

REPL

$ node debug script.js < debugger listening on port 5858 connecting… ok debug> repl Druk op Ctrl + C om debug repl> foo 2> 2 + 2 4 te verlaten

Met de Read-Eval-Print-Loop van de debugger kunt u tijdens de uitvoering interactief code invoeren en zo toegang krijgen tot de status van de toepassing en al zijn variabelen en methoden op het moment dat de uitvoering wordt verbroken. Dit is een zeer krachtige tool die u kunt gebruiken om uw app snel te ontsmetten.

Over het algemeen is de REPL beschikbaar als een standalone en als onderdeel van de foutopsporing en kunt u JavaScript interactief uitvoeren. Typ bijvoorbeeld gewoon knooppunt bij de prompt zonder opties, en je krijgt een REPL-interface die je kunt intoetsen en de output kunt zien.

Instappen en uitstappen

Eerder noemde ik de cont en volgende (c en n), waarmee we de uitvoering van de code kunnen voortzetten zodra een onderbrekingspunt is bereikt. Bovendien kunnen we tijdens het doorlopen van de code ook naar een methode stappen of naar de bovenliggende scope gaan.

Gebruik de commando's stap om in en te stappen uit uitstappen, of s en O in het kort.

backtracing

Gebruik backtrace of bt om een ​​uitvoer van de backtrace voor het huidige uitvoeringsframe te krijgen.

Het opnieuw starten

Gebruik herstarten of r om uw script opnieuw te starten vanaf het begin van de uitvoering.

Alternatieve manieren om verbinding te maken met de debugger

Geavanceerde gebruikers kunnen ook toegang krijgen tot de foutopsporingsfunctie door Node.js te starten met de --debug opdrachtregel, of door een bestaand Node.js-proces te signaleren met SIGUSR1.

Zodra op deze manier een proces in de foutopsporingsmodus is ingesteld, kan het vervolgens worden verbonden door de debugger Node.js te gebruiken door ofwel de pid van het lopende proces of via een URI-referentie (bijv localhost: port) om de luistervrijgrijger aan te sluiten:

  • node debug -p  verbindt met het proces via de pid.
  • knooppunt debug  maakt via de URI verbinding met het proces zoals localhost: 5858.

Node Inspector gebruiken

Naast de CLI-foutopsporingsprogramma biedt Node Inspector ook een GUI-inspecteur in de webbrowser (momenteel alleen ondersteuning voor Chrome en Opera).

Om de debugger te gebruiken, installeer eenvoudig als volgt:

npm install -g node-inspector

Nu we de Node Inspector hebben geïnstalleerd, kunnen we onze script.js debuggen met:

node-debug script.js

Je shell zal nu het volgende uitvoeren en waarschijnlijk de webbrowser openen naar de URL als je Chrome of Opera hebt ingesteld als standaard in je ontwikkelings-OS.

Node Inspector is nu beschikbaar via http://127.0.0.1:8080/?ws=127.0.0.1:8080&port=5858 Debugging 'script.js' Debugger luisteren op poort 5858

In uw webbrowser kunt u nu uw toepassing debuggen in een soortgelijke omgeving als het pakket met ontwikkelaarstools. Het instellen van onderbrekingspunten en weergavecode is nu geïntegreerd in uw browserweergave. Genieten!

Conclusie

Foutopsporing hoeft geen nachtmerrie te zijn en hoeft ook niet stressvol te zijn. 

Het instellen van onderbrekingspunten en het doorlopen van code is zo eenvoudig in Node. Het is een zeer vergelijkbare ervaring voor Ruby, en als je probeert een applicatie te begrijpen die je hebt gekregen, is het openen van de app in de debug-modus en het onderbreken van de uitvoering een fantastische manier om te leren in een snel tijdsbestek.