Cvičení – protokolování a trasování

Dokončeno

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.Assertmůž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!