StackFrame 构造函数 
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
初始化 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
 
初始化 StackFrame 类的新实例。
public:
 StackFrame();
	public StackFrame ();
	Public Sub New ()
  适用于
StackFrame(Int32)
- 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 类提供的一个更大示例的一部分。
void InternalMethod()
{
   try
   {
      ClassLevel2^ nestedClass = gcnew 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 = gcnew StackTrace( gcnew 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 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
 
初始化 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 = gcnew ClassLevel1;
   try
   {
      mainClass->InternalMethod();
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( " Main method exception handler" );
      
      // Display file and line information, if available.
      StackTrace^ st = gcnew StackTrace( gcnew 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]
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
 
初始化只包含给定文件名和行号的 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 类提供的一个更大示例的一部分。
void Level3Method()
{
   try
   {
      ClassLevel4^ nestedClass = gcnew 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 = gcnew StackTrace( gcnew 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().ToString() );
         
         // Note that the column number defaults to zero
         // when not initialized.
         Console::WriteLine( " Column Number: {0}", sf->GetFileColumnNumber().ToString() );
         Console::WriteLine( " Intermediate Language Offset: {0}", sf->GetILOffset().ToString() );
         Console::WriteLine( " Native Offset: {0}", sf->GetNativeOffset().ToString() );
         
      }
      Console::WriteLine();
      Console::WriteLine( "   ... throwing exception to next level ..." );
      Console::WriteLine( "-------------------------------------------------\n" );
      throw e;
   }
}
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
 
初始化与当前堆栈帧之上的帧对应的 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 类提供的一个更大示例的一部分。
void Level2Method()
{
   try
   {
      ClassLevel3^ nestedClass = gcnew ClassLevel3;
      nestedClass->Level3Method();
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( " Level2Method exception handler" );
      
      // Display the full call stack at this level.
      StackTrace^ st1 = gcnew 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 = gcnew StackTrace( gcnew 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 = gcnew 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 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
 
初始化只包含给定文件名、行号和列号的 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 = gcnew 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 = gcnew StackTrace( gcnew 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().ToString() );
      Console::WriteLine( " Column Number: {0}", sf->GetFileColumnNumber().ToString() );
   }
   Console::WriteLine();
   Console::WriteLine( "   ... throwing exception to next level ..." );
   Console::WriteLine( "-------------------------------------------------\n" );
   throw e;
}
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
    	注解
如果不想使用调试器的行映射逻辑,请使用此构造函数。