Gyakorlat – Naplózás és nyomkövetés

Befejeződött

Most, hogy az alkalmazás megkezdte a fejlesztést, jó, ha további diagnosztikát ad hozzá a logikához, hogy segítsen a fejlesztőknek új funkciók hozzáadásában. A hibakeresési diagnosztikával kapcsolatos új ismereteinket felhasználhatjuk a feladat elvégzéséhez.

Írás a hibakeresési konzolra

Az alkalmazás hibakeresése előtt adjunk hozzá további hibakeresési diagnosztikát. A további diagnosztikák segítenek diagnosztizálni az alkalmazást, miközben hibakeresés alatt fut.

A fájl tetején Program.cs hozzáadunk egy új using utasítást, amelyet be szeretnénk adni System.Diagnostics , hogy használhassuk a Debug metódusokat.

using System.Diagnostics;

Adjon hozzá egy utasítást WriteLine a Fibonacci metódus elején, hogy egyértelmű legyen, amikor hibakeresést hajt végre a kódon.

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

A hurok végén for minden értéket ki tudunk nyomtatni. Feltételes nyomtatási utasítást is használhatunk, ha csak akkor használunk WriteIf vagy WriteLineIf adunk hozzá egy nyomtatási sort, ha sum az 1 a ciklus végén:

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

Hibakeresés az alkalmazásban, és a következő kimenetet kell kapnia:

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

Feltételek keresése az Assert használatával

Bizonyos esetekben előfordulhat, hogy le szeretné állítani a teljes futó alkalmazást, ha egy adott feltétel nem teljesül. A használatával Debug.Assertellenőrizheti a feltételt, és további információkat adhat meg az alkalmazás állapotáról. Adjon hozzá egy ellenőrzést közvetlenül a visszatérési utasítás előtt, hogy az n2 5 legyen.

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

Az alkalmazáslogika már helyes, ezért frissítsük Fibonacci(5); a következőre Fibonacci(6);:

Hibakeresés az alkalmazásban. Amikor Debug.Assert a kódban fut, a hibakereső leállítja az alkalmazást, így megvizsgálhatja a változókat, megnézheti az ablakot, meghívhatja a vermet stb. Az üzenetet a hibakeresési konzolon is ki is adja.

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

Állítsa le a hibakeresést, majd futtassa az alkalmazást hibakeresés nélkül az alábbi parancs beírásával a terminálon.

dotnet run

Az alkalmazás leáll, miután az állítás sikertelen volt, és az adatok naplózása megtörtént az alkalmazás kimenetében.

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

Most futtassuk az alkalmazást konfigurációban Release az alábbi paranccsal a terminálban.

dotnet run --configuration Release

Az alkalmazás sikeresen lefut a befejezésig, mert már nem vagyunk a Debug konfigurációban.

Gratulálunk, sikeresen és hatékonyan hibakeresést végzett a .NET funkcióinak használatával, amelyek tartalmazzák Debug.WriteLine és Debug.Assert. Remek!