Упражнение. Ведение журнала и трассировка
Теперь, когда разработка приложения уже началась, было бы неплохо добавить в логику дополнительные диагностические возможности, чтобы помочь разработчикам добавлять новые функции. Для этой задачи можно использовать наши новые знания о диагностике для отладки.
Запись в консоль отладки
Перед отладкой приложения мы добавим дополнительные средства диагностики для отладки. Эти средства помогут анализировать приложение в сеансе отладки.
В верхней части файла
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 (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
Проверка условий с помощью оператора утверждения
В некоторых ситуациях нужно полностью остановить приложение, если не выполняется определенное условие. С помощью Debug.Assert
можно проверять такое условие и выводить дополнительные сведения о состоянии приложения. Давайте добавим перед оператором return проверку того, что значение 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
. Отличная работа!