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. Abychom splnili tento úkol, můžeme využít naše nové znalosti diagnostických nástrojů.
Zápis do konzoly ladění
Než začneme ladit aplikaci, přidejme 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 souboru Program.cs
přidáme nový příkaz using
, který přidá System.Diagnostics
, abychom mohli použít Debug
metody.
using System.Diagnostics;
Na začátek metody Fibonacci
přidejte příkaz WriteLine
, 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ší smyčky for
bychom mohli vypsat každou hodnotu. K podmíněnému tisku můžeme také použít příkaz s WriteIf
nebo WriteLineIf
, který přidá tiskovou řádku pouze tehdy, pokud je na konci smyčky for hodnota sum
rovna 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}");
}
Odlaďte aplikaci 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í Debug.Assert
můžete zkontrolovat podmínku a zobrazit další informace o stavu aplikace. Pojďme před návratovým příkazem přidat kontrolu, aby se zajistilo, ž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;
Logika aplikace je už správná, proto aktualizujeme náš Fibonacci(5);
na Fibonacci(6);
, což bude mít jiný výsledek.
Ladění aplikace Když Debug.Assert
spustíte v kódu, ladicí program zastaví aplikaci, abyste mohli kontrolovat proměnné, sledovací okno, zásobník volání a další. Také vypíše zprávu na konzoli 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í kontroly a informace jsou uloženy do výstupu aplikace.
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ď aplikaci spustíme v konfiguraci Release
pomocí následujícího příkazu v terminálu.
dotnet run --configuration Release
Aplikace se úspěšně dokončí, protože už nejsme v konfiguraci Debug
.
Blahopřejeme, úspěšně a efektivně jste odstraňovali chyby v kódu pomocí funkcí .NET, které zahrnují Debug.WriteLine
a Debug.Assert
. Skvělá práce!