Övning – Loggning och spårning

Slutförd

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.Assertkan 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!