Övning – Använda det inbyggda Node.js-felsökningsprogrammet

Slutförd

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.

  1. Starta processen för att skapa ett nytt GitHub Codespace på grenen main av MicrosoftDocs/node-essentials GitHub-lagringsplatsen.

  2. På sidan Skapa kodområde granskar du konfigurationsinställningarna för kodområdet och väljer sedan Skapa kodområde

    Screenshot of the confirmation screen before creating a new codespace.

  3. Vänta tills kodområdet har startats. Den här startprocessen kan ta några minuter.

  4. Öppna en ny terminal i kodområdet.

    Dricks

    Du kan använda huvudmenyn för att navigera till menyalternativet Terminal och sedan välja alternativet Ny terminal .

    Screenshot of the codespaces menu option to open a new terminal.

  5. 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.

  6. 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.

  1. Öppna undermappen ./nodejs-debug och skapa sedan en ny JavaScript-fil med namnet myfibonacci.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.

  2. 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);
    
  3. Spara filen CTRL + S.

  4. Högerklicka på undermappen ./nodejs-debug och välj Open 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 sumanvä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 < nhoppade 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.