.NET에서 Debug 관련해서 할 때, Visual Studo 를 사용하다 보면, 현재 실행 위치를 기반으로 실행 순서를 확인할 수 있습니다. Call Stack 이라는 이름의 창으로 그 안으로 보면, 어느 부분에서 어떻게 실행되었는지, 해당 코드는 어떤 파일이며, 몇번째 라인에서 실행했는지 등을 확인 할 수 있습니다.

그림에 있는 Call Stack 까지는 아니지만, 최소한 어떤 함수에서 어떤 함수로 불렸는지 확인하는 방법이 있습니다.이 때 사용하는 것이, System.Diagnostics.StackTrace 라는 클래스 입니다.

이 클래스를 생성한 뒤, GetFrames() 라는 함수를 부르면, 그 메소드를 호출한 위치의 Thread를 기준으로 Call Stack 내용을 끄집어 낼 수 있습니다. 이 때 가져오는 형태를 StackFrame이라고 하는데, 이것을 Array 형태로 가져옵니다.

이 Array를 열어 GetMethed() 한 뒤, Name을 끄집어 내면 해당 실행 모듈의 이름을 꺼낼 수 있습니다.
위의 Flow를 이용하여 간단한 소스를 나타내면 다음과 같습니다.


System.Diagnostics.StackTrace stacks = new System.Diagnostics.StackTrace(); 
System.Diagnostics.StackFrame[] frames = stacks.GetFrames(); 
foreach (System.Diagnostics.StackFrame frame in frames) 
{ 
      System.Diagnostics.Debug.Write(frame.GetMethod().Name); 
      System.Diagnostics.Debug.Write(" <- " ); 
} 
System.Diagnostics.Debug.WriteLine(" ");

그러면 현재 호출된 메소드를 기준으로 표시됩니다.
필요하면 Method에 개체를 이용해서 Assembly를 빼거나, 기타 소스 코드들을 따라 들어가면, 원하는 정보들을 쉽게 뽑아낼 수 있을 것입니다.

728x90

+ Recent posts