Вправа – журналювання та трасування
Тепер, коли програма розпочала розробку, радимо додати до логіки більше діагностики, щоб допомогти розробникам під час додавання нових функцій. Ми можемо використовувати наші нові знання діагностики налагодження для виконання цього завдання.
Записування до консолі налагодження
Перш ніж налагодити програму, додамо більше діагностики налагодження. Додаткова діагностика допоможе діагностувати застосунок під час його запуску під налагодження.
У верхній частині файлу 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, можна перевірити стан і вивести додаткові відомості про стан програми. Додамо перевірку перед оператором повернення, щоб переконатися, що 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. Гарна робота!