Felsöka med det inbyggda felsökningsprogrammet i Node.js

Slutförd

Felsökning är ett program med flera steg som vanligtvis följer dessa steg:

  1. Identifiera ett fel i programmet.
  2. Ta reda på var felet finns i koden.
  3. Analysera varför felet uppstår.
  4. Åtgärda felet.
  5. Kontrollera att korrigeringen fungerar.

När du har identifierat ett fel i ditt Node.js-program är den första utmaningen att hitta var felet finns i din kod. För att uppnå detta är ett av de mest effektiva sätten att köra koden steg för steg för att få en uppfattning om var saker går fel.

Brytpunkter

Det kan vara extremt ineffektivt att köra igenom all kod steg för steg om ditt program innehåller tusentals rader kod. I så fall kan du använda en brytpunkt. Med den kan du bryta programmets normala körning och pausa körningen vid en viss punkt i koden.

Med brytpunkter kan programmet köras normalt tills det når en kritisk del av koden där du misstänker att felet finns. Sedan kan du växla till att köra steg för steg.

Det finns flera sätt att definiera brytpunkter i koden beroende på vilket felsökningsprogram och kodredigeringsprogram du använder.

Inspektionsläge för Node.js

Eftersom ett felsökningsprogram har fullständig åtkomst till körningsmiljön kan en obehörig aktör också använda den för att mata in godtycklig kod i node.js-programmet. Därför tillåter Node.js som standard inte att du felsöker ett program som körs. Du måste aktivera ett speciellt läge som kallas inspector (inspektör) för att tillåta felsökning.

Du måste starta programmet med --inspect alternativet att tillåta att en felsökningsklient ansluter sig till programmet och tar kontroll över programkörningen.

När Node.js startas med --inspect alternativet lyssnar det som standard på värden 127.0.0.1 på porten 9229. Du kan också ange en anpassad värd och port med hjälp av syntaxen --inspect=<HOST>:<PORT>.

Viktigt!

Undvik att binda Node.js-felsökningsporten till en offentlig IP-adress eller till 0.0.0.0. Annars kan alla klienter som kan ansluta till din IP-adress eventuellt ansluta och styra ditt Node.js-program. På så sätt kan en angripare fjärrköra godtycklig kod i din körningsmiljö. Den här åtgärden kan leda till en potentiell allvarlig säkerhetsöverträdelse.

Alternativt kan du använda alternativet --inspect-brk. Det fungerar på samma sätt som --inspect men bryter kodkörningen precis före kodens början. På så sätt kan du koppla felsökningsprogrammet och ta dig tid att ange brytpunkter och stega igenom koden för att identifiera rotorsaken till problemet. Använd den här --inspect-brk växeln när du behöver felsöka:

  • Ett konkurrenstillstånd.
  • Tillfälligt problem som är svårt att återskapa.

När programmet har startats med kontrollläget aktiverat kan du använda alla kompatibla felsökningsklienter för att ansluta till din programprocess.

Felsökningsklienter

Om du vill felsöka programmet måste du använda en felsökningsklient. En felsökningsklient är ett program som ansluter till node.js-programmet och gör att du kan styra dess körning. Det finns många tillgängliga felsökningsklienter, men de vanligaste är:

  • Visual Studio Code: En grafisk felsökningsklient som medföljer Visual Studio Code. Använd detta när du felsöker under utvecklingen.
  • node-inspect: En kommandoradsfelsökarklient som levereras tillsammans med Node.js. Använd detta när du felsöker i produktion.

Inbyggt felsökningsprogram

Du kan använda node-inspect, kommandoradsklienten för felsökning, som medföljer Node.js, för att felsöka node.js-programmet. Det är ett enkelt felsökningsprogram som gör att du kan ange brytpunkter och köra koden steg för steg.

node inspect <YOUR_SCRIPT>.js

Felsökningsprogrammet node-inspect kör Node.js med kontrollläget aktiverat och startar samtidigt som det integrerade interaktiva felsökningsprogrammet. Körningen pausas precis innan koden startas. Du bör se felsökningsprompten som anger att den har startats.

node inspect myscript.js
< Debugger listening on ws://127.0.0.1:9229/ce3689fa-4433-41ee-9d5d-98b5bc5dfa27
< For help, see: https://nodejs.org/en/docs/inspector
< Debugger attached.
Break on start in myscript.js:1
> 1 const express = require('express');
  2
  3 const app = express();
debug>