연습 - 로깅 및 추적

완료됨

이제 애플리케이션 개발이 시작되었으니 개발자가 새로운 기능을 추가하는 데 도움이 되도록 추가 진단을 로직에 추가하는 것이 좋습니다. 디버그 진단에 대한 새로운 지식을 사용하여 이 작업을 수행할 수 있습니다.

디버그 콘솔에 쓰기

애플리케이션을 디버그하기 전에 디버그 진단을 추가해 보겠습니다. 추가 진단을 사용하면 디버그에 따라 실행되는 애플리케이션을 진단할 수 있습니다.

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 루프가 끝나면 모든 값을 출력할 수 있습니다. for 루프의 끝에서 sum가 1인 경우에만 WriteIf 또는 WriteLineIf을 사용하여 인쇄 줄을 추가하는 조건부 인쇄문을 사용할 수도 있습니다.

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가 되도록 하는 return 문 바로 앞에 확인을 추가해 보겠습니다.

// 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 구성에 있지 않으므로 애플리케이션은 성공적으로 실행됩니다.

축하합니다. Debug.WriteLineDebug.Assert를 비롯한 .NET 기능을 사용하여 코드를 성공적이고 효율적으로 디버그했습니다. 훌륭합니다!