Øvelse – logging og sporing

Fullført

Nå som programmet har startet utviklingen, er det godt å legge til flere diagnostikker i logikken for å hjelpe utviklere når de legger til nye funksjoner. Vi kan bruke vår nye kunnskap om feilsøkingsdiagnose for å utføre denne oppgaven.

Skriv til feilsøkingskonsollen

Før vi feilsøker programmet, kan vi legge til flere feilsøkingsdiagnoser. Ytterligere diagnostikk vil bidra til å diagnostisere programmet mens det kjøres under feilsøking.

Øverst i Program.cs-filen legger vi til en ny using setning for å hente inn System.Diagnostics, slik at vi kan bruke Debug metoder.

using System.Diagnostics;

Legg til en WriteLine setning i begynnelsen av Fibonacci metoden for å få klarhet når du feilsøker gjennom koden.

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

På slutten av vår for løkke kunne vi skrive ut alle verdier. Vi kan også bruke en betinget utskriftssetning ved å bruke WriteIf eller WriteLineIf til å legge til en utskriftslinje bare når sum er 1 på slutten av for løkken:

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}");    
}

Feilsøk programmet, og du bør få følgende utdata:

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

Se etter betingelser med Assert

I enkelte situasjoner vil du kanskje stoppe hele programmet som kjører når en bestemt betingelse ikke er oppfylt. Ved hjelp av Debug.Assertkan du se etter en betingelse og sende tilleggsinformasjon om tilstanden til programmet. La oss legge til en sjekk rett før retursetningen for å sikre at n2 er 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;

Programlogikken vår er allerede riktig, så la oss oppdatere Fibonacci(5); til Fibonacci(6);, noe som vil ha et annet resultat.

Feilsøke programmet. Når Debug.Assert kjøres i koden, stopper feilsøkingsprogrammet programmet slik at du kan undersøke variabler, overvåkingsvindu, anropsstakk og mer. Den sender også meldingen til feilsøkingskonsollen.

---- 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

Stopp feilsøking, og kjør deretter programmet uten feilsøking ved å skrive inn følgende kommando i terminalen.

dotnet run

Programmet avsluttes etter at deklarasjonen mislyktes, og informasjonen er logget på programutdataene.

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

La oss nå kjøre programmet i Release konfigurasjon med følgende kommando i terminalen.

dotnet run --configuration Release

Programmet kjøres til fullføring fordi vi ikke lenger er i Debug-konfigurasjonen.

Gratulerer, du har vellykket og effektivt feilsøket kode ved hjelp av funksjoner i .NET, som inkluderer Debug.WriteLine og Debug.Assert. Godt gjort!