StackFrame Constructor (Int32)
.NET Framework 4
Initializes a new instance of the StackFrame class that corresponds to a frame above the current stack frame.
Assembly: mscorlib (in mscorlib.dll)
The following example demonstrates the use of the StackFrame(Int32) constructor. This code example is part of a larger example provided for the StackFrame class.
public void InternalMethod() { try { ClassLevel2 nestedClass = new ClassLevel2(); nestedClass.Level2Method(); } catch (Exception e) { Console.WriteLine(" InternalMethod exception handler"); // Build a stack trace from one frame, skipping the // current frame and using the next frame. By // default, file and line information are not displayed. StackTrace st = new StackTrace(new StackFrame(1)); Console.WriteLine(" Stack trace for next level frame: {0}", st.ToString()); Console.WriteLine(" Stack frame for next level: "); Console.WriteLine(" {0}", st.GetFrame(0).ToString()); Console.WriteLine(" Line Number: {0}", st.GetFrame(0).GetFileLineNumber().ToString()); Console.WriteLine(); Console.WriteLine(" ... throwing exception to next level ..."); Console.WriteLine("-------------------------------------------------\n"); throw e; } }
Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Does not work in release
It should be noted that the compiler optimzes the StackFrame when not hosted in Visual Studio and in release mode. So if you have a call chain of Main() -> A() -> B() -> C() and you log the name in C, you get Main, even though it is called from B.
- 12/19/2011
- AnzeVodovnik