Ćwiczenie — rejestrowanie i śledzenie

Ukończone

Teraz, gdy aplikacja rozpoczyna programowanie, warto dodać więcej diagnostyki do logiki, aby pomóc deweloperom w dodawaniu nowych funkcji. Możemy użyć naszej nowej wiedzy na temat diagnostyki debugowania, aby wykonać to zadanie.

Zapisywanie do konsoli debugowania

Przed rozpoczęciem debugowania aplikacji dodajmy dodatkową diagnostykę debugowania. Dalsza diagnostyka może pomóc zdiagnozować aplikację podczas jej uruchamiania w ramach debugowania.

  1. W górnej części pliku Program.cs dodaj nową instrukcję using, aby zaimportować System.Diagnostics i móc używać metod Debug.

    using System.Diagnostics;
    
  2. Dodaj WriteLine instrukcje na początku Fibonacci metody, aby uzyskać jasność podczas debugowania kodu.

    Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
    Debug.WriteLine($"We are looking for the {n}th number");
    
  3. Na końcu for pętli możemy wyprowadzić każdą wartość. Możemy też użyć warunkowej instrukcji wyświetlania, korzystając z instrukcji WriteIf lub WriteLineIf. Dodaj opcję wyświetlania wiersza tylko wtedy, gdy element sum ma wartość 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}");    
    }
    
  4. Przeprowadź debugowanie aplikacji. Powinny zostać wyświetlone 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 przy użyciu potwierdzenia

W niektórych sytuacjach może być konieczne zatrzymanie całej działającej aplikacji, gdy określony warunek nie zostanie spełniony. Użycie elementu Debug.Assert umożliwia sprawdzenie warunku i wygenerowanie dodatkowych informacji wyjściowych o stanie aplikacji. Dodajmy sprawdzenie 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, dlatego zaktualizujmy nasz Fibonacci(5); na Fibonacci(6);, co generuje inny wynik.

Przeprowadź debugowanie aplikacji. Po uruchomieniu elementu Debug.Assert w kodzie debuger zatrzymuje aplikację, aby można było sprawdzić zmienne, okno wyrażenia kontrolnego, stos wywołań i inne elementy. Wysyła również komunikat wyjściowy 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 awarii asercji, a informacje są rejestrowane 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 konfiguracji Release przy użyciu następującego polecenia w terminalu.

dotnet run --configuration Release

Aplikacja działa aż do pomyślnego zakończenia, ponieważ nie jest już w konfiguracji Debug.

Gratulacje, pomyślnie i skutecznie debugowałeś kod, wykorzystując funkcje platformy .NET, które obejmują Debug.WriteLine i Debug.Assert. Gotowe!