Ćwiczenie — rejestrowanie i śledzenie

Ukończone

Teraz, gdy aplikacja rozpoczęła tworzenie aplikacji, 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 w konsoli debugowania

Przed debugowaniem aplikacji dodajmy więcej diagnostyki debugowania. Dodatkowa diagnostyka pomoże zdiagnozować aplikację podczas jej uruchamiania w ramach debugowania.

W górnej Program.cs części pliku dodamy nową using instrukcję, aby wprowadzić System.Diagnostics metodę Debug .

using System.Diagnostics;

Dodaj instrukcję WriteLine 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");

Na końcu for pętli możemy wyświetlić każdą wartość. Możemy również użyć warunkowej instrukcji drukowania przy użyciu polecenia WriteIf lub WriteLineIf dodać wiersz wydruku tylko wtedy, gdy sum wartość 1 znajduje się 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ą polecenia Debug.Assertmożna sprawdzić warunek i wyświetlić 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 wartość Fibonacci(5); Fibonacci(6);, która będzie miała inny wynik.

Debugowanie aplikacji. Po Debug.Assert uruchomieniu 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 Debug konfiguracji.

Gratulacje, kod został pomyślnie i skutecznie debugowany przy użyciu funkcji platformy .NET, które obejmują Debug.WriteLine i Debug.Assert. Gotowe!