Övning – Loggning och spårning
Nu när programmet har börjat utvecklas är det bra att lägga till mer diagnostik i logiken för att hjälpa utvecklare när de lägger till nya funktioner. Vi kan använda våra nya kunskaper om felsökningsdiagnostik för att utföra den här uppgiften.
Skriva till felsökningskonsolen
Innan vi felsöker programmet ska vi lägga till mer felsökningsdiagnostik. Ytterligare diagnostik hjälper till att diagnostisera programmet medan det körs under felsökning.
Överst i filen Program.cs
lägger vi till en ny using
-instruktion för att ta in System.Diagnostics
så att vi kan använda Debug
metoder.
using System.Diagnostics;
Lägg till en WriteLine
-instruktion i början av Fibonacci
-metoden för att få klarhet när du felsöker genom koden.
Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");
I slutet av vår for
-loop kan vi skriva ut varje värde. Vi kan också använda en villkorsstyrd utskriftsinstruktur med hjälp av WriteIf
eller WriteLineIf
för att lägga till en utskriftsrad endast när sum
är 1 i slutet av for-loopen:
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}");
}
Felsök programmet och du bör få följande utdata:
Entering Fibonacci method
We are looking for the 5th number
sum is 1, n1 is 1, n2 is 1
Sök efter villkor med Assert
I vissa situationer kanske du vill stoppa hela programmet som körs när ett visst villkor inte uppfylls. Med hjälp av Debug.Assert
kan du söka efter ett villkor och ange ytterligare information om programmets tillstånd. Vi lägger till en kontroll precis innan retursatsen för att se till att n2 är 5.
// 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;
Vår programlogik är redan korrekt, så vi uppdaterar vår Fibonacci(5);
till Fibonacci(6);
, som kommer att ha ett annat resultat.
Felsöka programmet. När Debug.Assert
körs i koden stoppar felsökningsprogrammet programmet så att du kan granska variabler, visningsfönster, anropsstack med mera. Meddelandet matas också ut till felsökningskonsolen.
---- 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
Sluta felsöka och kör sedan programmet utan felsökning genom att ange följande kommando i terminalen.
dotnet run
Programmet avslutas efter att försäkran har misslyckats och information har loggats till programmets utdata.
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 ska vi köra programmet i Release
konfiguration med följande kommando i terminalen.
dotnet run --configuration Release
Programmet har slutförts eftersom vi inte längre är i Debug
konfigurationen.
Grattis, du har lyckats felsöka kod på ett effektivt sätt med hjälp av funktioner i .NET, som omfattar Debug.WriteLine
och Debug.Assert
. Bra gjort!