연습 - 로깅 및 추적
이제 애플리케이션이 개발을 시작했으므로 개발자가 새 기능을 추가할 때 도움이 되도록 논리에 진단을 추가하는 것이 좋습니다. 디버그 진단에 대한 새로운 지식을 사용하여 이 작업을 수행할 수 있습니다.
디버그 콘솔에 쓰기
애플리케이션을 디버그하기 전에 디버그 진단을 추가해 보겠습니다. 추가 진단은 디버그에서 실행되는 동안 애플리케이션을 진단하는 데 도움이 될 수 있습니다.
Debug메서드를 사용할 수 있도록Program.cs파일 위에 새로운using문을 추가하여System.Diagnostics를 가져옵니다.using System.Diagnostics;코드를 통해 디버그할 때 명확하게 하기 위해
Fibonacci메서드 시작 시에WriteLine문을 추가합니다.Debug.WriteLine($"Entering {nameof(Fibonacci)} method"); Debug.WriteLine($"We are looking for the {n}th number");루프가
for끝나면 모든 값을 출력할 수 있습니다. 또는WriteIf나WriteLineIf를 사용하여 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}"); }애플리케이션을 디버그합니다. 다음과 같은 출력이 표시됩니다.
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.WriteLine 및 Debug.Assert를 포함한 .NET 기능을 사용하여 코드를 성공적이고 효율적으로 디버깅했습니다. 모두 완료되었습니다!