Oefening: logboekregistratie en tracering
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.Assert
kunt 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.