Övning – Använda det inbyggda Node.js-felsökningsprogrammet
I praktiken skapar du ett kort Node.js-program för att beräkna N:e numret i Fibonacci-sekvensen.
Fibonacci-sekvensen är en uppsättning tal som börjar med talet 0 och 1, där vartannat följande tal är summan av de två tidigare talen. Sekvensen fortsätter på det sättet:
0, 1, 1, 2, 3, 5, 8, 13, 21...
Nu ska vi skapa ett nytt Node.js-program för att illustrera konceptet.
Öppna projektet i utvecklingscontainern
Den här utbildningsmodulen erbjuder en utvecklingscontainer, antingen i en webbläsare eller för din lokala dator. Den här containern tillhandahåller alla behovsmiljöer så att du kan använda den här träningsmodulen utan att behöva installera en IDE eller Node.js. Du behöver inte veta något om containern för att slutföra den här utbildningsmodulen.
Starta processen för att skapa ett nytt GitHub Codespace på grenen
main
avMicrosoftDocs/node-essentials
GitHub-lagringsplatsen.På sidan Skapa kodområde granskar du konfigurationsinställningarna för kodområdet och väljer sedan Skapa kodområde
Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.
Öppna en ny terminal i kodområdet.
Kontrollera att Node.js är installerat i din miljö:
node --version
Utvecklingscontainern använder en Node.js LTS-version. Den exakta versionen kan vara annorlunda.
De återstående övningarna i det här projektet sker i samband med den här utvecklingscontainern.
Förbereda miljön
Innan vi går in på övningen behöver vi först förbereda koden och miljön.
Öppna undermappen
./nodejs-debug
och skapa sedan en ny JavaScript-fil med namnetmyfibonacci.js
. Filen som redan finns i mappen är en lösning på övningen, med den korrigering som behövs för felet som hittades under felsökningen.Klistra in den här koden i filen:
function fibonacci(n) { let n1 = 0; let n2 = 1; let sum = 0; for (let i = 2; i < n; i++) { sum = n1 + n2; n1 = n2; n2 = sum; } return n === 0 ? n1 : n2; } const result = fibonacci(5); console.log(result);
Spara filen CTRL + S.
Högerklicka på undermappen
./nodejs-debug
och väljOpen in integrated terminal
och kör programmet med hjälp av följande kommando:node fibonacci.js
Programmet ska visa resultatet 3
(tre) i konsolen. Hoppsan, det verkar som om det finns en bugg där eftersom vi förväntade oss att se 5
(fem) som resultat. Vi tar reda på vad som gått fel med hjälp av det inbyggda Node.js-felsökningsprogrammet.
Fuskark för felsökningskommandon
Det inbyggda felsökningsprogrammet Node.js levereras med en uppsättning kommandon som du kan använda för att styra körningen av programmet. Här är ett snabbt fuskark med de vanligaste kommandona:
Kommando | beskrivning |
---|---|
c |
Fortsätt. Fortsätter körningen till nästa brytpunkt eller till slutet av programmet. |
next |
Step over (Gå förbi). Det här kommandot liknar step kommandot, förutom att om nästa kodrad är ett funktionsanrop kör det funktionen utan att gå in i den. |
s |
Gå vidare till. Det här kommandot liknarnext kommandot, förutom att om nästa kodrad är ett funktionsanrop går du till den första raden i funktionens kod. |
sb() |
Lägg till en brytpunkt på den aktuella raden. |
exec <EXPR> |
Utvärdera ett uttryck inom den aktuella körningskontexten. Det här kommandot är användbart för att ge dig information om det aktuella tillståndet. Du kan till exempel hämta värdet för en variabel som heter i med hjälp av exec i . |
Ctrl + D | Stoppa felsökningsprogrammet. |
Starta det inbyggda felsökningsprogrammet
Starta programmet igen, den här gången med det inbyggda felsökningsprogrammet aktiverat. Ange det här kommandot i terminalen:
node inspect fibonacci.js
I terminalen bör felsökningsprompten visas. Gå nu in i koden genom att köra s
+ <Enter>
tills körningspunkten finns i början av fibonacci
funktionen, så här:
break in fibonacci.js:2
1 function fibonacci(n) {
> 2 let n1 = 0;
3 let n2 = 1;
4 let sum = 0;
debug>
Nu kan vi kontrollera värdet för parametern n som skickas i funktionen genom att köra följande kommando:
exec n
Du bör se 5
(fem) visas som resultatet i konsolen. Fortsätt att gå in i koden genom att köra s
kommandot tills körningspunkten finns i början av loopen. Det tar fem steg med s
kommandot för att nå den här punkten:
break in fibonacci.js:7
5
6 for (let i = 2; i < n; i++) {
> 7 sum = n1 + n2;
8 n1 = n2;
9 n2 = sum;
debug>
Kommentar
Du kanske har märkt att för att gå igenom for(...) {}
raden krävs flera steg med felsökningskommandona. Detta inträffar eftersom det finns flera instruktioner på den här raden. När du stegar går du vidare till nästa -instruktion i koden. Det finns vanligtvis en instruktion per rad. Om så inte är fallet behöver du flera steg för att gå vidare till nästa rad.
Hitta felet med brytpunkter
Nu ska vi lägga till en brytpunkt på den här raden så att vi snabbt kan gå igenom loop-iterationerna. Ange följande kommando i terminalen:
sb()
Nu bör samma rader visas igen i konsolen, vilket indikerar att en brytpunkt har angetts på den här raden. När den aktuella körningspunkten flyttas visas en asterisk *
på raden där du anger brytpunkten.
Gå vidare till nästa loop-iteration genom att köra c
kommandot i terminalen:
c
Vi kan kontrollera det aktuella iterationstillståndet exec
med kommandot och se värdet för flera variabler med hjälp av en matris som kommandoparameter. Om du vill se iteratorns i
värden och summan sum
använder vi syntaxen [i, sum]
. Ange det här kommandot i terminalen:
exec [i, sum]
Du bör se resultatet [ 3, 1 ]
i konsolen.
Koden har ännu inte uppdaterat värdet för variabeln sum
för den aktuella iterationen, som är 3
(tre).
Värdet för variabeln sum
visar fortfarande Fibonacci-talet för den tidigare iterationen. Här är beräkningen som vi använder i koden för att hämta det aktuella sum
värdet:
fibonacci(2) = fibonacci(0) + fibonacci(1)
= 0 + 1
= 1
Baserat på vår beräkning verkar det som om vårt program körs korrekt fram till den här punkten.
Fortsätt till nästa loop-iteration genom att köra c
kommandot i terminalen och kontrollera sedan tillståndet igen:
c
exec [i, sum]
Du bör se resultatet [ 4, 2 ]
i konsolen.
Nu är vi på den punkt precis före iterationsnumret som vi är intresserade av, vilket är 5
(fem). För att vara försiktig ska vi gå vidare steg för steg genom den här iterationen s
med hjälp av kommandot . Försök att nå vår tidigare brytpunkt, men ett steg i taget. Gå inte längre än brytpunkten!
Vad hände?
Åtgärda felet
När du har kontrollerat loopvillkoret i < n
hoppade körningen plötsligt till den rad som har return
kommandot . Det här bör du se i terminalen:
break in fibonacci.js:12
10 }
11
>12 return n === 0 ? n1 : n2;
13 }
14
Vi har hittat felet! I stället för att uppdatera summan för iterationen 5
(fem) hoppade koden ut ur loopen. Därför fick vi resultatet av den tidigare iterationen 3
(tre) i vår första körning.
Vi måste åtgärda loopvillkoret i fibonacci.js-koden. I kodredigeraren ändrar du värdet för testsatsen från mindre än <
till mindre än eller lika med <=
:
for (let i = 2; i <= n; i++) {
sum = n1 + n2;
n1 = n2;
n2 = sum;
}
Spara ändringarna i kodredigeraren och avsluta sedan felsökningsprogrammet genom att välja Ctrl+D.
Kör nu programmet igen i terminalen:
node fibonacci.js
Du bör se det förväntade resultatet som visas i konsolen nu, vilket är 5
(fem).
Du kan använda det inbyggda felsökningsprogrammet i Node.js för att lära dig de grundläggande felsökningsprinciperna och för snabba felsökningssessioner. Det kan vara besvärande att ange kommandona och kan vara för begränsat och svårt att använda med komplexa program.
I nästa avsnitt tittar vi på hur du använder felsökningsprogrammet i Visual Studio Code i stället.