Ćwiczenie — rejestrowanie i śledzenie

Ukończone

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!