Gyakorlat – Naplózás és nyomkövetés
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.Assert
ellenő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!