StackFrame 생성자

정의

StackFrame 클래스의 새 인스턴스를 초기화합니다.

오버로드

Name Description
StackFrame()

StackFrame 클래스의 새 인스턴스를 초기화합니다.

StackFrame(Int32)

현재 스택 프레임 위의 프레임에 StackFrame 해당하는 클래스의 새 인스턴스를 초기화합니다.

StackFrame(Boolean)

필요에 따라 원본 정보를 캡처하여 클래스의 StackFrame 새 인스턴스를 초기화합니다.

StackFrame(String, Int32)

지정된 파일 이름 및 줄 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.

StackFrame(Int32, Boolean)

필요에 따라 원본 정보를 캡처하여 현재 스택 프레임 위의 프레임에 해당하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.

StackFrame(String, Int32, Int32)

지정된 파일 이름, 줄 번호 및 열 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.

StackFrame()

StackFrame 클래스의 새 인스턴스를 초기화합니다.

public:
 StackFrame();
public StackFrame();
Public Sub New ()

적용 대상

StackFrame(Int32)

현재 스택 프레임 위의 프레임에 StackFrame 해당하는 클래스의 새 인스턴스를 초기화합니다.

public:
 StackFrame(int skipFrames);
public StackFrame(int skipFrames);
new System.Diagnostics.StackFrame : int -> System.Diagnostics.StackFrame
Public Sub New (skipFrames As Integer)

매개 변수

skipFrames
Int32

건너뛸 스택의 프레임 수입니다.

예제

다음 예제에서는 생성자의 사용을 StackFrame(Int32) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.

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;
   }
}
Public Sub InternalMethod()
   Try
      Dim nestedClass As New ClassLevel2
      nestedClass.Level2Method()
   Catch e As Exception
      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.
      Dim st As 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("-------------------------------------------------")
      Console.WriteLine()
      Throw e
   End Try
End Sub

적용 대상

StackFrame(Boolean)

필요에 따라 원본 정보를 캡처하여 클래스의 StackFrame 새 인스턴스를 초기화합니다.

public:
 StackFrame(bool fNeedFileInfo);
public StackFrame(bool fNeedFileInfo);
new System.Diagnostics.StackFrame : bool -> System.Diagnostics.StackFrame
Public Sub New (fNeedFileInfo As Boolean)

매개 변수

fNeedFileInfoneedFileInfo
Boolean

true스택 프레임의 파일 이름, 줄 번호 및 열 번호를 캡처하려면 그렇지 않으면 . false

예제

다음 예제에서는 생성자의 사용을 StackFrame(Boolean) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.

[STAThread]
static void Main()
 {
     ClassLevel1 mainClass = new ClassLevel1();

     try {
         mainClass.InternalMethod();
     }
     catch (Exception) {
        Console.WriteLine(" Main method exception handler");

        // Display file and line information, if available.
        StackTrace st = new StackTrace(new StackFrame(true));
        Console.WriteLine(" Stack trace for current level: {0}",
            st.ToString());
        Console.WriteLine(" File: {0}",
           st.GetFrame(0).GetFileName());
        Console.WriteLine(" Line Number: {0}",
            st.GetFrame(0).GetFileLineNumber().ToString());

        Console.WriteLine();
        Console.WriteLine("-------------------------------------------------\n");
     }
 }
<STAThread()>  _
Shared Sub Main()
   Dim mainClass As New ClassLevel1
   
   Try
      mainClass.InternalMethod()
   Catch
      Console.WriteLine(" Main method exception handler")
      
      ' Display file and line information, if available.
      Dim st As New StackTrace(New StackFrame(True))
      Console.WriteLine(" Stack trace for current level: {0}", _
         st.ToString())
      Console.WriteLine(" File: {0}", _
         st.GetFrame(0).GetFileName())
      Console.WriteLine(" Line Number: {0}", _
         st.GetFrame(0).GetFileLineNumber().ToString())
      
      Console.WriteLine()
      Console.WriteLine("-------------------------------------------------")
      Console.WriteLine()
   End Try
End Sub

적용 대상

StackFrame(String, Int32)

지정된 파일 이름 및 줄 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.

public:
 StackFrame(System::String ^ fileName, int lineNumber);
public StackFrame(string fileName, int lineNumber);
new System.Diagnostics.StackFrame : string * int -> System.Diagnostics.StackFrame
Public Sub New (fileName As String, lineNumber As Integer)

매개 변수

fileName
String

파일 이름입니다.

lineNumber
Int32

지정된 파일의 줄 번호입니다.

예제

다음 예제에서는 생성자의 사용을 StackFrame(String, Int32) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.

public void Level3Method()
{
   try
   {
      ClassLevel4 nestedClass = new ClassLevel4();
      nestedClass.Level4Method();
   }
   catch (Exception e)
   {
      Console.WriteLine(" Level3Method exception handler");

      // Build a stack trace from a dummy stack frame.
      // Explicitly specify the source file name and
      // line number.
      StackTrace st = new StackTrace(new StackFrame("source.cs", 60));
      Console.WriteLine(" Stack trace with dummy stack frame: {0}",
                  st.ToString());
      for(int i =0; i< st.FrameCount; i++ )
      {
         // Display the stack frame properties.
         StackFrame sf = st.GetFrame(i);
         Console.WriteLine(" File: {0}", sf.GetFileName());
         Console.WriteLine(" Line Number: {0}",
            sf.GetFileLineNumber());
         // Note that the column number defaults to zero
         // when not initialized.
         Console.WriteLine(" Column Number: {0}",
            sf.GetFileColumnNumber());
         if (sf.GetILOffset() != StackFrame.OFFSET_UNKNOWN)
         {
            Console.WriteLine(" Intermediate Language Offset: {0}",
               sf.GetILOffset());
         }
         if (sf.GetNativeOffset() != StackFrame.OFFSET_UNKNOWN)
         {
            Console.WriteLine(" Native Offset: {0}",
               sf.GetNativeOffset());
         }
      }
      Console.WriteLine();
      Console.WriteLine("   ... throwing exception to next level ...");
      Console.WriteLine("-------------------------------------------------\n");
      throw e;
   }
}
Public Sub Level3Method()
   Try
      Dim nestedClass As New ClassLevel4()
      nestedClass.Level4Method()
   Catch e As Exception
      Console.WriteLine(" Level3Method exception handler")
      
      ' Build a stack trace from a dummy stack frame.
      ' Explicitly specify the source file name and line number.
      Dim st As New StackTrace(New StackFrame("source.cs", 60))
      Console.WriteLine(" Stack trace with dummy stack frame: {0}", _
         st.ToString())
      Dim i As Integer
      For i = 0 To st.FrameCount - 1
         ' Display the stack frame properties.
         Dim sf As StackFrame = st.GetFrame(i)
         Console.WriteLine(" File: {0}", sf.GetFileName())
         Console.WriteLine(" Line Number: {0}", _
            sf.GetFileLineNumber())
         ' The column number defaults to zero when not initialized.
         Console.WriteLine(" Column Number: {0}", _
            sf.GetFileColumnNumber())
         If sf.GetILOffset <> StackFrame.OFFSET_UNKNOWN
            Console.WriteLine(" Intermediate Language Offset: {0}", _
                sf.GetILOffset())
         End If
         If sf.GetNativeOffset <> StackFrame.OFFSET_UNKNOWN
           Console.WriteLine(" Native Offset: {0}", _
               sf.GetNativeOffset())
         End If
      Next i 
      Console.WriteLine()
      Console.WriteLine("   ... throwing exception to next level ...")
      Console.WriteLine("-------------------------------------------------")
      Console.WriteLine()
      Throw e
   End Try
End Sub

설명

디버거의 줄 매핑 논리를 사용하지 않으려면 이 생성자를 사용합니다.

적용 대상

StackFrame(Int32, Boolean)

필요에 따라 원본 정보를 캡처하여 현재 스택 프레임 위의 프레임에 해당하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.

public:
 StackFrame(int skipFrames, bool fNeedFileInfo);
public StackFrame(int skipFrames, bool fNeedFileInfo);
new System.Diagnostics.StackFrame : int * bool -> System.Diagnostics.StackFrame
Public Sub New (skipFrames As Integer, fNeedFileInfo As Boolean)

매개 변수

skipFrames
Int32

건너뛸 스택의 프레임 수입니다.

fNeedFileInfoneedFileInfo
Boolean

true스택 프레임의 파일 이름, 줄 번호 및 열 번호를 캡처하려면 그렇지 않으면 . false

예제

다음 예제에서는 생성자의 사용을 StackFrame(Int32, Boolean) 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.

public void Level2Method()
{
   try
   {
      ClassLevel3 nestedClass = new ClassLevel3();
      nestedClass.Level3Method();
   }
   catch (Exception e)
   {
      Console.WriteLine(" Level2Method exception handler");

      // Display the full call stack at this level.
      StackTrace st1 = new StackTrace(true);
      Console.WriteLine(" Stack trace for this level: {0}",
         st1.ToString());

      // Build a stack trace from one frame, skipping the current
      // frame and using the next frame.
      StackTrace st2 = new StackTrace(new StackFrame(1, true));
      Console.WriteLine(" Stack trace built with next level frame: {0}",
         st2.ToString());

      // Build a stack trace skipping the current frame, and
      // including all the other frames.
      StackTrace st3 = new StackTrace(1, true);
      Console.WriteLine(" Stack trace built from the next level up: {0}",
         st3.ToString());

      Console.WriteLine();
      Console.WriteLine("   ... throwing exception to next level ...");
      Console.WriteLine("-------------------------------------------------\n");
      throw e;
   }
}
Public Sub Level2Method()
   Try
      Dim nestedClass As New ClassLevel3
      nestedClass.Level3Method()
   
   Catch e As Exception
      Console.WriteLine(" Level2Method exception handler")
      
      ' Display the full call stack at this level.
      Dim st1 As New StackTrace(True)
      Console.WriteLine(" Stack trace for this level: {0}", _
         st1.ToString())
      
      ' Build a stack trace from one frame, skipping the current
      ' frame and using the next frame.
      Dim st2 As New StackTrace(New StackFrame(1, True))
      Console.WriteLine(" Stack trace built with next level frame: {0}", _
          st2.ToString())
      
      ' Build a stack trace skipping the current frame, and
      ' including all the other frames.
      Dim st3 As New StackTrace(1, True)
      Console.WriteLine(" Stack trace built from the next level up: {0}", _
          st3.ToString())
      
      Console.WriteLine()
      Console.WriteLine("   ... throwing exception to next level ...")
      Console.WriteLine("-------------------------------------------------")
      Console.WriteLine()
      Throw e
   End Try
End Sub

적용 대상

StackFrame(String, Int32, Int32)

지정된 파일 이름, 줄 번호 및 열 번호만 포함하는 클래스의 StackFrame 새 인스턴스를 초기화합니다.

public:
 StackFrame(System::String ^ fileName, int lineNumber, int colNumber);
public StackFrame(string fileName, int lineNumber, int colNumber);
new System.Diagnostics.StackFrame : string * int * int -> System.Diagnostics.StackFrame
Public Sub New (fileName As String, lineNumber As Integer, colNumber As Integer)

매개 변수

fileName
String

파일 이름입니다.

lineNumber
Int32

지정된 파일의 줄 번호입니다.

colNumber
Int32

지정된 파일의 열 번호입니다.

예제

다음 예제에서는 생성자의 사용을 StackFrame 보여 줍니다. 이 코드 예제는 클래스에 제공된 더 큰 예제의 StackFrame 일부입니다.

try
{
   ClassLevel5 nestedClass = new ClassLevel5();
   nestedClass.Level5Method();
}
catch (Exception e)
{
   Console.WriteLine(" Level4Method exception handler");

   // Build a stack trace from a dummy stack frame.
   // Explicitly specify the source file name, line number
   // and column number.
   StackTrace st = new StackTrace(new StackFrame("source.cs", 79, 24));
   Console.WriteLine(" Stack trace with dummy stack frame: {0}",
                  st.ToString());

   // Access the StackFrames explicitly to display the file
   // name, line number and column number properties.
   // StackTrace.ToString only includes the method name.
   for(int i =0; i< st.FrameCount; i++ )
   {
      StackFrame sf = st.GetFrame(i);
      Console.WriteLine(" File: {0}", sf.GetFileName());
      Console.WriteLine(" Line Number: {0}",
         sf.GetFileLineNumber());
      Console.WriteLine(" Column Number: {0}",
         sf.GetFileColumnNumber());
   }
   Console.WriteLine();
   Console.WriteLine("   ... throwing exception to next level ...");
   Console.WriteLine("-------------------------------------------------\n");
   throw e;
}
   Try
      Dim [nestedClass] As New ClassLevel5()
      [nestedClass].Level5Method()
   Catch e As Exception
      Console.WriteLine(" Level4Method exception handler")
      
      ' Build a stack trace from a dummy stack frame.
      ' Explicitly specify the source file name, line number
      ' and column number.
      Dim st As New StackTrace(New StackFrame("source.cs", 79, 24))
      Console.WriteLine(" Stack trace with dummy stack frame: {0}", _
         st.ToString())
      
      ' Access the StackFrames explicitly to display the file
      ' name, line number and column number properties.
      ' StackTrace.ToString only includes the method name. 
      Dim i As Integer
      For i = 0 To st.FrameCount - 1
         Dim sf As StackFrame = st.GetFrame(i)
         Console.WriteLine(" File: {0}", sf.GetFileName())
         Console.WriteLine(" Line Number: {0}", _
            sf.GetFileLineNumber())
         Console.WriteLine(" Column Number: {0}", _
            sf.GetFileColumnNumber())
      Next i
      Console.WriteLine()
      Console.WriteLine("   ... throwing exception to next level ...")
      Console.WriteLine("-------------------------------------------------")
      Console.WriteLine()
      Throw e
   End Try
End Sub

설명

디버거의 줄 매핑 논리를 사용하지 않으려면 이 생성자를 사용합니다.

적용 대상