Поделиться через


StackTrace Конструкторы

Определение

Инициализирует новый экземпляр класса StackTrace.

Перегрузки

StackTrace()

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора.

StackTrace(Boolean)

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора и дополнительно может собирать сведения об источнике.

StackTrace(IEnumerable<StackFrame>)

Создает трассировку стека из набора StackFrame объектов .

StackTrace(StackFrame)

Инициализирует новый экземпляр класса StackTrace, содержащий один фрагмент.

StackTrace(Exception)

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта исключения.

StackTrace(Int32)

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора, пропуская заданное число фрагментов.

StackTrace(Exception, Int32)

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта, пропуская указанное число фрагментов.

StackTrace(Int32, Boolean)

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора, пропуская заданное число фрагментов и дополнительно собирая сведения об источнике.

StackTrace(Thread, Boolean)
Устаревшие..

Инициализирует новый экземпляр класса StackTrace для определенного потока и дополнительно может собирать сведения об источнике.

Не используйте эту перегрузку конструктора.

StackTrace(Exception, Int32, Boolean)

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта исключения, пропуская заданное число фрагментов и дополнительно собирая сведения об источнике.

StackTrace(Exception, Boolean)

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта исключения и дополнительно может собирать сведения об источнике.

StackTrace()

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора.

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

Примеры

В следующем примере кода отображаются первый и последний вызовы функций в трассировке стека.

void Level5Method()
{
   try
   {
      ClassLevel6^ nestedClass = gcnew ClassLevel6;
      nestedClass->Level6Method();
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( " Level5Method exception handler" );
      StackTrace^ st = gcnew StackTrace;
      
      // Display the most recent function call.
      StackFrame^ sf = st->GetFrame( 0 );
      Console::WriteLine();
      Console::WriteLine( "  Exception in method: " );
      Console::WriteLine( "      {0}", sf->GetMethod() );
      if ( st->FrameCount > 1 )
      {
         
         // Display the highest-level function call
         // in the trace.
         sf = st->GetFrame( st->FrameCount - 1 );
         Console::WriteLine( "  Original function call at top of call stack):" );
         Console::WriteLine( "      {0}", sf->GetMethod() );
      }
      Console::WriteLine();
      Console::WriteLine( "   ... throwing exception to next level ..." );
      Console::WriteLine( "-------------------------------------------------\n" );
      throw e;
   }

}
public void Level5Method()
{
   try
   {
      ClassLevel6 nestedClass = new ClassLevel6();
      nestedClass.Level6Method();
   }
   catch (Exception e)
   {
      Console.WriteLine(" Level5Method exception handler");

      StackTrace st = new StackTrace();

      // Display the most recent function call.
      StackFrame sf = st.GetFrame(0);
      Console.WriteLine();
      Console.WriteLine("  Exception in method: ");
      Console.WriteLine("      {0}", sf.GetMethod());

      if (st.FrameCount >1)
      {
         // Display the highest-level function call
         // in the trace.
         sf = st.GetFrame(st.FrameCount-1);
         Console.WriteLine("  Original function call at top of call stack):");
         Console.WriteLine("      {0}", sf.GetMethod());
      }

      Console.WriteLine();
      Console.WriteLine("   ... throwing exception to next level ...");
      Console.WriteLine("-------------------------------------------------\n");
      throw e;
   }
}
Public Sub Level5Method()
   Try
      Dim nestedClass As New ClassLevel6()
      nestedClass.Level6Method()
   Catch e As Exception
      Console.WriteLine(" Level5Method exception handler")
      
      Dim st As New StackTrace()
      
      ' Display the most recent function call.
      Dim sf As StackFrame = st.GetFrame(0)
      Console.WriteLine()
      Console.WriteLine("  Exception in method: ")
      Console.WriteLine("      {0}", sf.GetMethod())
      
      If st.FrameCount > 1 Then
         ' Display the highest-level function call in the trace.
         sf = st.GetFrame((st.FrameCount - 1))
         Console.WriteLine("  Original function call at top of call stack):")
         Console.WriteLine("      {0}", sf.GetMethod())
      End If
      
      Console.WriteLine()
      Console.WriteLine("   ... throwing exception to next level ...")
      Console.WriteLine("-------------------------------------------------")
      Console.WriteLine()
      Throw e
   End Try
End Sub

Комментарии

Создается StackTrace с текущим потоком вызывающего объекта и не содержит имя файла, номер строки или сведения о столбце.

Используйте этот конструктор без параметров, если требуется полная трассировка только сводных сведений о стеке вызовов.

Применяется к

StackTrace(Boolean)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора и дополнительно может собирать сведения об источнике.

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

Параметры

fNeedFileInfo
Boolean

Значение true для извлечения имени файла, номера строки и номера столбца, в противном случае — значение false.

Примеры

В следующем примере кода показаны различные StackTrace методы конструктора.

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

Комментарии

Создается StackTrace с текущим потоком вызывающего объекта.

Применяется к

StackTrace(IEnumerable<StackFrame>)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Создает трассировку стека из набора StackFrame объектов .

public:
 StackTrace(System::Collections::Generic::IEnumerable<System::Diagnostics::StackFrame ^> ^ frames);
public StackTrace (System.Collections.Generic.IEnumerable<System.Diagnostics.StackFrame> frames);
new System.Diagnostics.StackTrace : seq<System.Diagnostics.StackFrame> -> System.Diagnostics.StackTrace
Public Sub New (frames As IEnumerable(Of StackFrame))

Параметры

frames
IEnumerable<StackFrame>

Набор кадров стека, которые должны присутствовать в трассировке стека.

Применяется к

StackTrace(StackFrame)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace, содержащий один фрагмент.

public:
 StackTrace(System::Diagnostics::StackFrame ^ frame);
public StackTrace (System.Diagnostics.StackFrame frame);
new System.Diagnostics.StackTrace : System.Diagnostics.StackFrame -> System.Diagnostics.StackTrace
Public Sub New (frame As StackFrame)

Параметры

frame
StackFrame

Фрагмент, который должен содержаться в объекте StackTrace.

Примеры

В следующем примере кода данные трассировки стека записываются в запись журнала событий.

StackFrame^ fr = gcnew StackFrame( 1,true );
StackTrace^ st = gcnew StackTrace( fr );
EventLog::WriteEntry( fr->GetMethod()->Name, st->ToString(), EventLogEntryType::Warning );
StackFrame fr = new StackFrame(1,true);
StackTrace st = new StackTrace(fr);
EventLog.WriteEntry(fr.GetMethod().Name,
                    st.ToString(),
                    EventLogEntryType.Warning);
Dim frame As New StackFrame(1, True)
Dim strace As New StackTrace(frame)            

EventLog.WriteEntry(frame.GetMethod().Name, _
                    strace.ToString(), _
                    EventLogEntryType.Warning)

Комментарии

Используйте этот конструктор, если не требуется дополнительная нагрузка на полную трассировку стека.

См. также раздел

Применяется к

StackTrace(Exception)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта исключения.

public:
 StackTrace(Exception ^ e);
public StackTrace (Exception e);
new System.Diagnostics.StackTrace : Exception -> System.Diagnostics.StackTrace
Public Sub New (e As Exception)

Параметры

e
Exception

Объект исключения, на основе которого создается трассировка стека.

Исключения

Значение параметра e равно null.

Комментарии

Создается StackTrace с текущим потоком вызывающего объекта и не содержит имя файла, номер строки или сведения о столбце.

Результирующая трассировка стека описывает стек во время возникновения исключения.

См. также раздел

Применяется к

StackTrace(Int32)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора, пропуская заданное число фрагментов.

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

Параметры

skipFrames
Int32

Количество фрагментов вверх по стеку, с которого начинается трассировка.

Исключения

Параметр skipFrames имеет отрицательное значение.

Комментарии

Создается StackTrace с текущим потоком вызывающего объекта и не содержит имя файла, номер строки или сведения о столбце.

Если количество пропускаемых кадров больше или равно общему количеству кадров в стеке вызовов на момент создания экземпляра StackTrace , объект не будет содержать кадров.

Применяется к

StackTrace(Exception, Int32)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта, пропуская указанное число фрагментов.

public:
 StackTrace(Exception ^ e, int skipFrames);
public StackTrace (Exception e, int skipFrames);
new System.Diagnostics.StackTrace : Exception * int -> System.Diagnostics.StackTrace
Public Sub New (e As Exception, skipFrames As Integer)

Параметры

e
Exception

Объект исключения, на основе которого создается трассировка стека.

skipFrames
Int32

Количество фрагментов вверх по стеку, с которого начинается трассировка.

Исключения

Значение параметра e равно null.

Параметр skipFrames имеет отрицательное значение.

Комментарии

не StackTrace содержит имя файла, номер строки или сведения о столбце.

Результирующая трассировка стека описывает стек во время возникновения исключения.

Если количество пропускаемых кадров больше или равно общему количеству кадров в стеке вызовов на момент создания экземпляра StackTrace , объект не будет содержать кадров.

См. также раздел

Применяется к

StackTrace(Int32, Boolean)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace из фрагмента вызывающего оператора, пропуская заданное число фрагментов и дополнительно собирая сведения об источнике.

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

Параметры

skipFrames
Int32

Количество фрагментов вверх по стеку, с которого начинается трассировка.

fNeedFileInfo
Boolean

Значение true для извлечения имени файла, номера строки и номера столбца, в противном случае — значение false.

Исключения

Параметр skipFrames имеет отрицательное значение.

Примеры

В следующем примере кода показаны различные StackTrace методы конструктора.

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

Комментарии

Если количество пропускаемых кадров больше или равно общему количеству кадров в стеке вызовов на момент создания экземпляра StackTrace , объект не будет содержать кадров.

Применяется к

StackTrace(Thread, Boolean)

Внимание!

This constructor has been deprecated. Please use a constructor that does not require a Thread parameter. http://go.microsoft.com/fwlink/?linkid=14202

Инициализирует новый экземпляр класса StackTrace для определенного потока и дополнительно может собирать сведения об источнике.

Не используйте эту перегрузку конструктора.

public:
 StackTrace(System::Threading::Thread ^ targetThread, bool needFileInfo);
public StackTrace (System.Threading.Thread targetThread, bool needFileInfo);
[System.Obsolete("This constructor has been deprecated.  Please use a constructor that does not require a Thread parameter.  http://go.microsoft.com/fwlink/?linkid=14202")]
public StackTrace (System.Threading.Thread targetThread, bool needFileInfo);
new System.Diagnostics.StackTrace : System.Threading.Thread * bool -> System.Diagnostics.StackTrace
[<System.Obsolete("This constructor has been deprecated.  Please use a constructor that does not require a Thread parameter.  http://go.microsoft.com/fwlink/?linkid=14202")>]
new System.Diagnostics.StackTrace : System.Threading.Thread * bool -> System.Diagnostics.StackTrace
Public Sub New (targetThread As Thread, needFileInfo As Boolean)

Параметры

targetThread
Thread

Поток, для которого запрашивается трассировка стека.

needFileInfo
Boolean

Значение true для извлечения имени файла, номера строки и номера столбца, в противном случае — значение false.

Атрибуты

Исключения

Поток targetThread не приостанавливается.

Комментарии

Важно!

Не используйте этот конструктор. Она устарела, и рекомендуемой альтернативы нет. При приостановке потока невозможно узнать, какой код он выполняет, и взаимоблокировки могут возникать очень легко. Например, если вы приостанавливаете поток, удерживая блокировки во время оценки разрешений безопасности, другие потоки в AppDomain могут быть заблокированы. Если вы приостанавливаете поток во время выполнения конструктора класса, другие потоки в AppDomain , которые пытаются использовать этот класс, блокируются.

См. также раздел

Применяется к

StackTrace(Exception, Int32, Boolean)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта исключения, пропуская заданное число фрагментов и дополнительно собирая сведения об источнике.

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

Параметры

e
Exception

Объект исключения, на основе которого создается трассировка стека.

skipFrames
Int32

Количество фрагментов вверх по стеку, с которого начинается трассировка.

fNeedFileInfo
Boolean

Значение true для извлечения имени файла, номера строки и номера столбца, в противном случае — значение false.

Исключения

Значение параметра e равно null.

Параметр skipFrames имеет отрицательное значение.

Комментарии

Результирующая трассировка стека описывает стек во время возникновения исключения.

Если количество пропускаемых кадров больше или равно общему количеству кадров в стеке вызовов на момент создания экземпляра StackTrace , объект не будет содержать кадров.

См. также раздел

Применяется к

StackTrace(Exception, Boolean)

Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs
Исходный код:
StackTrace.cs

Инициализирует новый экземпляр класса StackTrace с использованием предоставленного объекта исключения и дополнительно может собирать сведения об источнике.

public:
 StackTrace(Exception ^ exception, bool needFileInfo);
public:
 StackTrace(Exception ^ e, bool fNeedFileInfo);
public StackTrace (Exception exception, bool needFileInfo);
public StackTrace (Exception e, bool fNeedFileInfo);
new System.Diagnostics.StackTrace : Exception * bool -> System.Diagnostics.StackTrace
new System.Diagnostics.StackTrace : Exception * bool -> System.Diagnostics.StackTrace
Public Sub New (exception As Exception, needFileInfo As Boolean)
Public Sub New (e As Exception, fNeedFileInfo As Boolean)

Параметры

exceptione
Exception

Объект исключения, на основе которого создается трассировка стека.

needFileInfofNeedFileInfo
Boolean

Значение true для извлечения имени файла, номера строки и номера столбца, в противном случае — значение false.

Исключения

Значение параметра e равно null.

Комментарии

Результирующая трассировка стека описывает стек во время возникновения исключения.

См. также раздел

Применяется к