Cvičení – protokolování a trasování
Teď, když aplikace začala vyvíjet, je dobré do logiky přidat další diagnostiku, která vývojářům pomáhá přidávat nové funkce. K provedení této úlohy můžeme využít naše nové znalosti diagnostiky ladění.
Zápis do konzoly ladění
Před laděním aplikace přidáme další diagnostiku ladění. Další diagnostika pomůže diagnostikovat aplikaci při jejím spuštění v rámci ladění.
V horní části Program.cs
souboru přidáme nový using
příkaz, který přidáme, System.Diagnostics
abychom mohli používat Debug
metody.
using System.Diagnostics;
WriteLine
Přidejte příkaz na začátek Fibonacci
metody, abyste získali přehlednost při ladění kódu.
Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");
Na konci naší for
smyčky bychom mohli vytisknout každou hodnotu. Podmíněný příkaz tisku můžeme použít také pomocí WriteIf
nebo WriteLineIf
přidat řádek tisku pouze v případě, že sum
je na konci smyčky for 1:
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}");
}
Ladění aplikace a měli byste získat následující výstup:
Entering Fibonacci method
We are looking for the 5th number
sum is 1, n1 is 1, n2 is 1
Kontrola podmínek pomocí assertu
V některých situacích můžete chtít zastavit celou spuštěnou aplikaci, pokud není splněna určitá podmínka. Pomocí příkazu Debug.Assert
můžete zkontrolovat podmínku a zobrazit další informace o stavu aplikace. Pojďme před příkaz return přidat kontrolu, abychom zajistili, že n2 je 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;
Naše logika aplikace je již správná, takže pojďme aktualizovat na Fibonacci(5);
Fibonacci(6);
, což bude mít jiný výsledek.
Ladění aplikace Při Debug.Assert
spuštění v kódu ladicí program zastaví aplikaci, abyste mohli kontrolovat proměnné, okno kukátka, zásobník volání a další. Také vypíše zprávu do konzoly ladění.
---- 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
Zastavte ladění a spusťte aplikaci bez ladění zadáním následujícího příkazu v terminálu.
dotnet run
Aplikace se ukončí po selhání kontrolního výrazu a do výstupu aplikace se zaprotokolují informace.
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
Teď spustíme aplikaci v Release
konfiguraci pomocí následujícího příkazu v terminálu.
dotnet run --configuration Release
Aplikace se úspěšně dokončí, protože už v konfiguraci nejsme Debug
.
Blahopřejeme, úspěšně a efektivně jste ladili kód pomocí funkcí .NET, které zahrnují Debug.WriteLine
a Debug.Assert
. Hotovo!