연습 - 로깅 및 추적

완료됨

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

디버그 콘솔에 쓰기

애플리케이션을 디버그하기 전에 디버그 진단을 추가해 보겠습니다. 추가 진단은 디버그에서 실행되는 동안 애플리케이션을 진단하는 데 도움이 될 수 있습니다.

  1. Debug 메서드를 사용할 수 있도록 Program.cs 파일 위에 새로운 using 문을 추가하여 System.Diagnostics를 가져옵니다.

    using System.Diagnostics;
    
  2. 코드를 통해 디버그할 때 명확하게 하기 위해 Fibonacci 메서드 시작 시에 WriteLine 문을 추가합니다.

    Debug.WriteLine($"Entering {nameof(Fibonacci)} method");
    Debug.WriteLine($"We are looking for the {n}th number");
    
  3. 루프가 for 끝나면 모든 값을 출력할 수 있습니다. 또는 WriteIfWriteLineIf를 사용하여 print 조건문을 사용할 수 있습니다. for 루프 끝의 sum이 1일 때만 print 줄을 추가합니다.

    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를 사용하면 조건을 확인하고 애플리케이션 상태에 대한 추가 정보를 출력할 수 있습니다. 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 기능을 사용하여 코드를 성공적이고 효율적으로 디버깅했습니다. 모두 완료되었습니다!