Упражнение. Ведение журнала и трассировка

Завершено

Теперь, когда приложение начало разработки, хорошо добавить в логику больше диагностики, чтобы помочь разработчикам при добавлении новых функций. Мы можем использовать новые знания о диагностике отладки для выполнения этой задачи.

Запись в консоль отладки

Перед отладкой приложения давайте добавим больше средств диагностики отладки. Дополнительная диагностика поможет диагностировать приложение во время отладки.

В верхней части файла Program.cs мы добавим новый оператор using, чтобы подключить System.Diagnostics и использовать методы Debug.

using System.Diagnostics;

Добавьте инструкцию WriteLine в начале метода Fibonacci, чтобы получить ясность при отладке кода.

Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
Debug.WriteLine($"We are looking for the {n}th number");

В конце цикла for мы могли бы распечатать каждое значение. Кроме того, можно использовать условный оператор с помощью WriteIf или WriteLineIf для добавления строки вывода только в том случае, если sum равно 1 в конце цикла 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}");    
}

Отладка приложения и получение следующих выходных данных:

Entering Fibonacci method
We are looking for the 5th number
sum is 1, n1 is 1, n2 is 1

Проверка условий с помощью Assert

В некоторых ситуациях может потребоваться остановить все работающее приложение, если определенное условие не выполнено. С помощью Debug.Assertможно проверить условие и вывести дополнительные сведения о состоянии приложения. Давайте добавим проверку прямо перед оператором возврата, чтобы убедиться, что n2 равно 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;

Логика приложения уже правильна, поэтому давайте обновим наш Fibonacci(5); до Fibonacci(6);, что приведет к другому результату.

Отладка приложения. При запуске Debug.Assert в коде отладчик останавливает приложение, чтобы можно было проверить переменные, окно просмотра, стек вызовов и многое другое. Он также выводит сообщение в консоль отладки.

---- 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

Остановите отладку, а затем запустите приложение без отладки, введя следующую команду в терминале.

dotnet run

Приложение завершается после сбоя утверждения, и данные записываются в выходные данные приложения.

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

Теперь давайте запустите приложение в Release конфигурации с помощью следующей команды в терминале.

dotnet run --configuration Release

Приложение успешно завершается, поскольку мы больше не в конфигурации Debug.

Поздравляем, вы успешно и эффективно отладили код с помощью функций .NET, которые включают Debug.WriteLine и Debug.Assert. Отлично!