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

Завершено

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

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

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

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

    using System.Diagnostics;
    
  2. Добавьте WriteLine операторы в начале Fibonacci метода, чтобы облегчить понимание при отладке кода.

    Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
    Debug.WriteLine($"We are looking for the {n}th number");
    
  3. В конце цикла 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}");    
    }
    
  4. Отладка приложения. Вы должны увидеть следующие выходные данные:

    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. Отличная работа!