Oefening: Het ingebouwde foutopsporingsprogramma van Node.js gebruiken

Voltooid

Als u de concepten voor foutopsporing die u zojuist hebt gezien, wilt gebruiken, maakt u een korte Node.js-toepassing om het Ne getal van de Fibonacci-reeks te berekenen.

De Fibonacci-reeks is een reeks getallen die begint met het getal 0 en 1, waarbij elk volgend getal de som is van de twee vorige getallen. De volgorde is als volgt:

0, 1, 1, 2, 3, 5, 8, 13, 21...

Laten we een nieuwe Node.js-toepassing maken om het concept te illustreren.

Project openen in ontwikkelingscontainer

Deze trainingsmodule biedt een ontwikkelcontainer in een browser of voor uw lokale computer. Deze container biedt alle benodigde omgevingen, zodat u deze trainingsmodule kunt gebruiken zonder dat u een IDE of Node.js hoeft te installeren. U hoeft niets te weten over de container om deze trainingsmodule te voltooien.

  1. Start het proces om een nieuwe GitHub Codespace te maken op de main vertakking van de MicrosoftDocs/node-essentials GitHub-opslagplaats.

  2. Controleer op de pagina Codespace maken de configuratie-instellingen van de codespace en selecteer vervolgens Codespace maken

    Screenshot of the confirmation screen before creating a new codespace.

  3. Wacht tot de coderuimte is gestart. Dit opstartproces kan enkele minuten duren.

  4. Open een nieuwe terminal in de codespace.

    Tip

    U kunt het hoofdmenu gebruiken om naar de menuoptie Terminal te navigeren en vervolgens de optie Nieuwe terminal te selecteren.

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

  5. Controleer of Node.js is geïnstalleerd in uw omgeving:

    node --version
    

    De dev-container maakt gebruik van een Node.js LTS-versie. De exacte versie kan afwijken.

  6. De resterende oefeningen in dit project vinden plaats in de context van deze ontwikkelingscontainer.

Omgeving voorbereiden

Voordat we dieper op de oefening ingaan, moeten we eerst de code en de omgeving voorbereiden.

  1. Open de submap en maak vervolgens een nieuw JavaScript-bestand met de ./nodejs-debug naam myfibonacci.js. Het bestand dat al in de map bestaat, is een oplossing voor de oefening, met de oplossing die nodig is voor de fout die is gevonden tijdens foutopsporing.

  2. Plak deze code in het bestand:

    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. Sla het bestand op, Ctrl + S.

  4. Klik met de rechtermuisknop op de ./nodejs-debug submap en selecteer Open in integrated terminal en voer het programma uit met behulp van de volgende opdracht:

    node fibonacci.js
    

De toepassing moet het resultaat 3 (drie) in de console weergeven. Oops, het lijkt erop dat er een bug in zit, omdat we verwachten (vijf) als resultaat te zien 5 . Laten we kijken wat er fout gaat met behulp van het ingebouwde foutopsporingsprogramma van Node.js.

Cheatsheet voor foutopsporingsprogramma-opdrachten

Het ingebouwde foutopsporingsprogramma van Node.js wordt geleverd met een set opdrachten die u kunt gebruiken om de uitvoering van uw programma te beheren. Hier volgt een beknopt cheatsheet met de meest voorkomende opdrachten:

Opdracht Beschrijving
c Doorgaan. Gaat door met de uitvoerbewerking tot aan het volgende onderbrekingspunt of het einde van uw programma.
next Overstappen. Deze opdracht is vergelijkbaar met de step opdracht, behalve dat als de volgende regel code een functie-aanroep is, de functie wordt uitgevoerd zonder er in te stappen.
s Instappen. Deze opdracht is vergelijkbaar met denext opdracht, behalve dat als de volgende regel code een functieoproep is, naar de eerste regel van de code van deze functie gaat.
sb() Voeg een onderbrekingspunt toe op de huidige regel.
exec <EXPR> Evalueer een expressie in de huidige uitvoeringscontext. Met deze opdracht kunt u informatie ophalen over de huidige status. U kunt bijvoorbeeld de waarde van een variabele met de naam i ophalen met behulp van exec i.
Ctrl + D Stop het foutopsporingsprogramma.

Het ingebouwde foutopsporingsprogramma starten

Start het programma opnieuw, nu het ingebouwde foutopsporingsprogramma is ingeschakeld. Voer deze opdracht in de terminal in:

node inspect fibonacci.js

In de terminal ziet u dat de prompt voor het foutopsporingsprogramma wordt weergegeven. Stap nu in de code door het s + <Enter> uitvoeringspunt uit te voeren totdat het uitvoeringspunt zich aan het begin van de fibonacci functie bevindt, zoals:

break in fibonacci.js:2
  1 function fibonacci(n) {
> 2   let n1 = 0;
  3   let n2 = 1;
  4   let sum = 0;
debug>

Op dit moment kunnen we de waarde controleren van de n-parameter die in de functie wordt doorgegeven door de volgende opdracht uit te voeren:

exec n

Als het goed is, wordt 5 (vijf) weergegeven als het resultaat in de console. Ga verder met het invoeren van de code door de s opdracht uit te voeren totdat het uitvoeringspunt zich binnen het begin van de lus bevindt. Het duurt vijf stappen met de s opdracht om dit punt te bereiken:

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>

Notitie

Mogelijk hebt u gemerkt dat voor het doorlopen van de for(...) {} regel meerdere stappen zijn vereist met de opdrachten voor foutopsporing. Deze situatie doet zich voor omdat er meerdere instructies op deze regel staan. Wanneer u stapt, gaat u naar de volgende instructie in uw code. Normaal gesproken is er één instructie per regel. Als dat niet het geval is, hebt u meerdere stappen nodig om naar de volgende regel te gaan.

De fout opsporen met onderbrekingspunten

We gaan nu een onderbrekingspunt toevoegen aan deze regel, zodat we snel door de lusiteraties kunnen gaan. Voer de volgende opdracht in de terminal in:

sb()

U ziet dat dezelfde regels opnieuw worden weergegeven in de console. Dit geeft aan dat het onderbrekingspunt op deze regel is ingesteld. Wanneer het huidige uitvoeringspunt wordt verplaatst, ziet u een sterretje * op de regel waar u het onderbrekingspunt instelt.

Ga naar de volgende lusiteratie door de c opdracht uit te voeren in de terminal:

c

We kunnen de huidige iteratiestatus controleren met de exec opdracht en de waarde van meerdere variabelen bekijken met behulp van een matrix als opdrachtparameter. Als u de waarden van de iterator i en het totaal sumwilt zien, gebruiken we de syntaxis [i, sum]. Voer deze opdracht in de terminal in:

exec [i, sum]

Als het goed is, ziet u het resultaat [ 3, 1 ] in de console.

De code heeft de waarde van de sum variabele voor de huidige iteratie nog niet bijgewerkt. Dit is 3 (drie). De waarde van de sum variabele toont nog steeds het Fibonacci-getal voor de vorige iteratie. Dit is de berekening die we in de code gebruiken om de huidige sum waarde op te halen:

fibonacci(2) = fibonacci(0) + fibonacci(1)
             = 0 + 1
             = 1

Op basis van onze berekening lijkt het erop dat ons programma tot nu toe correct wordt uitgevoerd.

Ga door naar de volgende lus-iteratie door de c opdracht uit te voeren in de terminal en controleer de status opnieuw:

c
exec [i, sum]

Als het goed is, ziet u het resultaat [ 4, 2 ] in de console.

Nu zijn we op het punt vlak voor het iteratienummer waarin we geïnteresseerd zijn, wat (vijf) is 5 . Om voorzichtig te zijn, gaan we stapsgewijs verder met deze iteratie met behulp van de s opdracht. Probeer ons vorige onderbrekingspunt te bereiken, maar doe dat stap voor stap. Stap niet verder dan het onderbrekingspunt!

Wat is er gebeurd?

De fout oplossen

Nadat de lusvoorwaarde i < nis gecontroleerd, springt de uitvoering plotseling naar de regel met de return opdracht. Dit ziet u in de terminal:

break in fibonacci.js:12
 10   }
 11
>12   return n === 0 ? n1 : n2;
 13 }
 14

Dat is het, we hebben onze fout opgespoord! In plaats van de som voor de iteratie 5 (vijf) bij te werken, springt de code uit de lus. Daarom hebben we het resultaat gekregen van de vorige iteratie 3 (drie) in onze eerste uitvoering.

We moeten de lusvoorwaarde in de fibonacci.js-code herstellen. Wijzig in de code-editor de waarde van de testinstructie van minder dan < of gelijk aan <=:

for (let i = 2; i <= n; i++) {
  sum = n1 + n2;
  n1 = n2;
  n2 = sum;
}

Sla uw wijzigingen op in de code-editor en sluit het foutopsporingsprogramma af door Ctrl+D te selecteren.

Voer uw programma nu opnieuw uit in de terminal:

node fibonacci.js

U ziet nu het verwachte resultaat dat in de console wordt weergegeven. Dit is 5 (vijf).

U kunt het ingebouwde foutopsporingsprogramma gebruiken in Node.js voor meer informatie over de basisprincipes van foutopsporing en voor snelle foutopsporingssessies. Het kan lastig zijn om de opdrachten in te voeren en kan te beperkt en moeilijk te gebruiken zijn met complexe programma's.

We kijken in de volgende secties hoe u in plaats daarvan het foutopsporingsprogramma van Visual Studio Code gebruikt.