■ StackFrame 클래스를 사용해 예외 발생시 스택 추적을 구하는 방법을 보여준다.
▶ Program.cs
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
using System; using System.Diagnostics; using System.Reflection; namespace TestProject { /// <summary> /// 프로그램 /// </summary> class Program { //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Static //////////////////////////////////////////////////////////////////////////////// Private #region 실행하기 - Execute(count) /// <summary> /// 실행하기 /// </summary> /// <param name="count">카운트</param> private static void Execute(int count) { if(count > 0) { Execute(count - 1); } else { throw new Exception(); } } #endregion #region 예외 호출 스택 출력하기 - PrintExceptionCallStack(exception) /// <summary> /// 예외 호출 스택 출력하기 /// </summary> /// <param name="exception">예외</param> private static void PrintExceptionCallStack(Exception exception) { StackTrace stackTrace = new StackTrace(exception, true); StackFrame[] stackFrameArray = stackTrace.GetFrames(); foreach (StackFrame stackFrame in stackFrameArray) { MethodBase methodBase = stackFrame.GetMethod(); Console.WriteLine($"{methodBase.ReflectedType.FullName}.{methodBase.Name} line {stackFrame.GetFileLineNumber()}"); } } #endregion #region 프로그램 시작하기 - Main() /// <summary> /// 프로그램 시작하기 /// </summary> private static void Main() { try { Execute(5); } catch(Exception exception) { PrintExceptionCallStack(exception); } } #endregion } } |