Ćwiczenie — rejestrowanie i śledzenie
Teraz, gdy aplikacja rozpoczęła rozwój, warto dodać więcej diagnostyki w logice aplikacji, aby pomóc programistom w dodawaniu nowych funkcji. Możemy użyć naszej nowej wiedzy na temat diagnostyki debugowania, aby wykonać to zadanie.
Zapisz w konsoli debugowania
Zanim przystąpimy do debugowania aplikacji, dodajmy więcej narzędzi diagnostycznych. Dodatkowa diagnostyka pomoże zdiagnozować aplikację podczas jej uruchamiania w ramach debugowania.
W górnej części pliku Program.cs dodamy nową instrukcję using, aby wprowadzić System.Diagnostics, aby umożliwić korzystanie z metod Debug.
using System.Diagnostics;
Dodaj instrukcję WriteLine na początku metody Fibonacci, aby uzyskać jasność podczas debugowania kodu.
Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");
Na końcu naszej pętli for możemy wyświetlić każdą wartość. Możemy również użyć warunkowego polecenia drukowania przy użyciu WriteIf lub WriteLineIf, aby dodać linię wydruku tylko wtedy, gdy sum jest 1 na końcu pętli for.
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}");
}
Debuguj aplikację i pobierz następujące dane wyjściowe:
Entering Fibonacci method
We are looking for the 5th number
sum is 1, n1 is 1, n2 is 1
Sprawdzanie warunków za pomocą potwierdzenia
W niektórych sytuacjach możesz zatrzymać całą uruchomioną aplikację, gdy określony warunek nie zostanie spełniony. Za pomocą Debug.Assertmożna sprawdzić warunek i uzyskać dodatkowe informacje o stanie aplikacji. Dodajmy sprawdzanie bezpośrednio przed instrukcją return, aby upewnić się, że n2 ma wartość 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;
Nasza logika aplikacji jest już poprawna, więc zaktualizujmy nasze Fibonacci(5); na Fibonacci(6);, co da inny wynik.
Debugowanie aplikacji. Po uruchomieniu Debug.Assert w kodzie debuger zatrzymuje aplikację, aby można było sprawdzić zmienne, okno kontrolne, stos wywołań i nie tylko. Zwraca również komunikat do konsoli debugowania.
---- 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
Zatrzymaj debugowanie, a następnie uruchom aplikację bez debugowania, wprowadzając następujące polecenie w terminalu.
dotnet run
Aplikacja zostanie zakończona po tym, jak potwierdzenie nie powiodło się, a informacje zostały zarejestrowane w danych wyjściowych aplikacji.
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
Teraz uruchomimy aplikację w Release konfiguracji przy użyciu następującego polecenia w terminalu.
dotnet run --configuration Release
Aplikacja została pomyślnie uruchomiona do ukończenia, ponieważ nie jesteśmy już w konfiguracji Debug.
Gratulacje, kod został pomyślnie i skutecznie debugowany przy użyciu funkcji platformy .NET, które obejmują Debug.WriteLine i Debug.Assert. Dobra robota!