티스토리 뷰

프로그래밍

C#의 StackTrace

merit nada 2021. 8. 27. 01:07

C#에서는 CallStack을 Runtime에 파악할 수 있는 기능을 제공합니다.

크게 두 가지 방식이 있는데

  1. Environment.StackTrace라는 Property를 이용하는 것
  2. StackTrace Class를 사용

이 두 가지입니다.

 

Environment.StackTrace

일단 첫 번째는 매우 간단합니다.

System.Environment.StackTrace라는 Property를 그대로 사용하면 됩니다.

 

예제를 위해 MyClass를 만들고 LogStackTrace() 함수를 만들어 봅시다.

MyClassLogStackTrace() 함수에서 Environment.StatckTrace를 그대로 출력하도록 구현해봅시다.

Main 함수에서는 다음과 같이 MyClass 객체를 만들고 LogStackTrace() 함수를 호출해봅시다.

결과는 아래와 같이 나오게 됩니다.

총 4줄이 표시되는데 가장 위에 2줄(GetStackTraceget_StackTrace()는 Property를 사용했음을 뜻합니다.)

호출 순서의 역순으로 표시되기 때문에 그 다음 줄은 MyClassLogStackTrace() 함수이고 그 다음 줄은 Main() 함수가 되게 됩니다.

 

StackTrace 클래스

System.DiagnosticsStackTrace라는 클래스가 있습니다.

해당 클래스를 이용해 객체를 생성하는 순간 Stack Trace 정보가 기록되고 나중에 불러와서 사용하는 방식입니다.

바로 예제를 보겠습니다.

Main() 함수에 위와 같이 코드를 작성하면 끝입니다.

frame count는 진입점으로부터 호출한 함수 수를 뜻합니다.

Main이 진입점이고 Main에서 바로 호출했기 때문에 값은 1이 됩니다.

GetMethod().ToString()은 리턴형, 함수명, 파라미터를 string 형태로 보여줍니다.

GetMethod().name은 함수명을 뜻합니다.

GetFileLineNumber()는 StackTrace 객체를 생성한 시점의 FileLineNumber를 뜻합니다.

GetFileColumnNumber()는 StackTrace 객체를 생성한 코드의 좌우 위치를 뜻합니다.

 

위와 같이 코드를 작성한 상황에서 결과는 아래와 같습니다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함