C# & VB.NET2007. 2. 26. 11:48
어떤 메소드의 호출자 정보를 알고 싶을 때가 있다. 문제가 발생했는데 디버깅하기가 힘들 때, 이런 호출자 정보들을 로그 등에 기록해둔다면, 문제 해결에 유용하게 쓰일 수 있는 단서가 될 것이다.

System.Diagnostics.StackFrame, System.Diagnostics.StackTrace 객체를 사용해서 호출자 정보를 얻을 수가 있다.

string stackTraceString = null;

System.Diagnostics.StackTrace objStackTrace = new System.Diagnostics.StackTrace(new System.Diagnostics.StackFrame(1));

stackTraceString = objStackTrace.ToString();

return stackTraceString;


마지막에 return되는 값은 다음과 같이 생겼다. 이것이 바로 현재 메소드를 호출한 Caller Method이다.

   at StackFrameTest.Class3.class3Method(String param)



* StackFrame 클래스를 생성할 때 주는 파라미터 - Integer - 를 조정해서, 각 호출 스택 상의 레벨을 모두 추적할 수도 있다.
* 간단하게 ToString()을 하면 저렇게 나오게 되지만, StackFrame 객체에는 GetFileName,
GetFileLineNumber 등의 더 자세한 정보를 알 수 있는 메소드들도 있다.

Posted by kkongchi

댓글을 달아 주세요

  1. Java쪽에서도 Log를 남기는 컴포넌트가 있지요. 예를들어
    log.debug("aa";); 라고 남긴다면, 해당 클래스및 메소드 위치, row 위치, 메시지등이
    기록에 남습니다.
    로그라.. 필수죠. 개발자에겐. ^^

    2007.02.26 12:21 [ ADDR : EDIT/ DEL : REPLY ]
    • 그렇죠..로그는 필수...하지만 비주얼 스튜디오같은 IDE를 써서 디버깅하지 못할 경우가 간혹 있을 수가 있으니까..

      2007.02.27 13:25 신고 [ ADDR : EDIT/ DEL ]
  2. 유용한 팁들이 많네요..

    2007.03.26 00:26 [ ADDR : EDIT/ DEL : REPLY ]