StackFrame 构造函数

定义

初始化 StackFrame 类的新实例。

重载

名称 说明
StackFrame()

初始化 StackFrame 类的新实例。

StackFrame(Int32)

初始化与当前堆栈帧上方的帧相对应的类的新实例 StackFrame

StackFrame(Boolean)

初始化类的新实例 StackFrame ,可以选择捕获源信息。

StackFrame(String, Int32)

初始化仅包含给定文件名和行号的 StackFrame 类的新实例。

StackFrame(Int32, Boolean)

初始化与当前堆栈帧上方的帧相对应的类的新实例 StackFrame ,可以选择捕获源信息。

StackFrame(String, Int32, Int32)

初始化仅包含给定文件名、行号和列号的 StackFrame 类的新实例。

StackFrame()

Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs

初始化 StackFrame 类的新实例。

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

适用于

StackFrame(Int32)

Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs

初始化与当前堆栈帧上方的帧相对应的类的新实例 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)

Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs

初始化类的新实例 StackFrame ,可以选择捕获源信息。

public:
 StackFrame(bool needFileInfo);
public:
 StackFrame(bool fNeedFileInfo);
public StackFrame(bool needFileInfo);
public StackFrame(bool fNeedFileInfo);
new System.Diagnostics.StackFrame : bool -> System.Diagnostics.StackFrame
new System.Diagnostics.StackFrame : bool -> System.Diagnostics.StackFrame
Public Sub New (needFileInfo As Boolean)
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)

Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs

初始化仅包含给定文件名和行号的 StackFrame 类的新实例。

public:
 StackFrame(System::String ^ fileName, int lineNumber);
public StackFrame(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)

Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs

初始化与当前堆栈帧上方的帧相对应的类的新实例 StackFrame ,可以选择捕获源信息。

public:
 StackFrame(int skipFrames, bool needFileInfo);
public:
 StackFrame(int skipFrames, bool fNeedFileInfo);
public StackFrame(int skipFrames, bool needFileInfo);
public StackFrame(int skipFrames, bool fNeedFileInfo);
new System.Diagnostics.StackFrame : int * bool -> System.Diagnostics.StackFrame
new System.Diagnostics.StackFrame : int * bool -> System.Diagnostics.StackFrame
Public Sub New (skipFrames As Integer, needFileInfo As Boolean)
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)

Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs
Source:
StackFrame.cs

初始化仅包含给定文件名、行号和列号的 StackFrame 类的新实例。

public:
 StackFrame(System::String ^ fileName, int lineNumber, int colNumber);
public StackFrame(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

注解

如果不想使用调试器的行映射逻辑,请使用此构造函数。

适用于