Oefening: logboekregistratie en tracering

Voltooid

Nu de toepassing is ontwikkeld, is het handig om meer diagnostische gegevens toe te voegen aan de logica om ontwikkelaars te helpen bij het toevoegen van nieuwe functies. We kunnen onze nieuwe kennis van foutopsporingsdiagnose gebruiken om deze taak uit te voeren.

Schrijven naar de console voor foutopsporing

Voordat we fouten in de toepassing opsporen, gaan we meer foutopsporingsdiagnose toevoegen. Aanvullende diagnostische gegevens helpen bij het diagnosticeren van de toepassing terwijl deze wordt uitgevoerd onder foutopsporing.

Boven aan het Program.cs bestand voegen we een nieuwe using instructie toe die moet worden binnengebracht System.Diagnostics , zodat we de Debug methoden kunnen gebruiken.

using System.Diagnostics;

Voeg aan het begin van de Fibonacci methode een WriteLine instructie toe om duidelijkheid te krijgen bij het opsporen van fouten in de code.

Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");

Aan het einde van onze for lus kunnen we elke waarde afdrukken. We kunnen ook een voorwaardelijke afdrukinstructie gebruiken door WriteIf WriteLineIf alleen een afdrukregel toe te voegen als sum deze 1 aan het einde van de for-lus is:

for (int i = 2; i <= n; i++)
{                  
    sum = n1 + n2;
    n1 = n2;
    n2 = sum;
    Debug.WriteLineIf(sum == 1, $"sum is 1, n1 is {n1}, n2 is {n2}");    
}

Fouten opsporen in de toepassing en u moet de volgende uitvoer krijgen:

Entering Fibonacci method
We are looking for the 5th number
sum is 1, n1 is 1, n2 is 1

Controleren op voorwaarden met Assert

In sommige situaties wilt u de hele actieve toepassing stoppen wanneer niet aan een bepaalde voorwaarde wordt voldaan. Met behulp van Debug.Assertkunt u controleren op een voorwaarde en aanvullende informatie uitvoeren over de status van de toepassing. Laten we een controle direct vóór de retourinstructie toevoegen om ervoor te zorgen dat n2 5 is.

// If n2 is 5 continue, else break.
Debug.Assert(n2 == 5, "The return value is not 5 and it should be.");
return n == 0 ? n1 : n2;

Onze toepassingslogica is al correct, dus we gaan ons Fibonacci(5); bijwerken naar Fibonacci(6);, wat een ander resultaat zal hebben.

Fouten opsporen in de toepassing. Wanneer Debug.Assert deze wordt uitgevoerd in de code, stopt het foutopsporingsprogramma de toepassing, zodat u variabelen kunt inspecteren, venster Controle, aanroepstack en meer. Het bericht wordt ook uitgevoerd naar de console voor foutopsporing.

---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
The return value is not 5 and it should be.
---- Assert Long Message ----

   at Program.<<Main>$>g__Fibonacci|0_0(Int32 n) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 23
   at Program.<Main>$(String[] args) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 3

Stop de foutopsporing en voer de toepassing uit zonder fouten op te sporen door de volgende opdracht in de terminal in te voeren.

dotnet run

De toepassing wordt beëindigd nadat de assertie is mislukt en informatie is vastgelegd in de uitvoer van de toepassing.

Process terminated. Assertion failed.
The return value is not 5 and it should be.
   at Program.<<Main>$>g__Fibonacci|0_0(Int32 n) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 23
   at Program.<Main>$(String[] args) in C:\Users\Jon\Desktop\DotNetDebugging\Program.cs:line 3

Nu gaan we de toepassing in Release configuratie uitvoeren met de volgende opdracht in de terminal.

dotnet run --configuration Release

De toepassing wordt voltooid omdat de Debug configuratie niet meer wordt uitgevoerd.

Gefeliciteerd, u hebt met succes en efficiënt fouten in code opgespoord met behulp van functies van .NET, waaronder Debug.WriteLine en Debug.Assert. Dat is dus gelukt.