Sdílet prostřednictvím


StackTrace Konstruktory

Definice

Inicializuje novou instanci StackTrace třídy.

Přetížení

StackTrace()

Inicializuje novou instanci StackTrace třídy z rámce volajícího.

StackTrace(Boolean)

Inicializuje novou instanci StackTrace třídy z rámce volajícího, volitelně zachytává informace o zdroji.

StackTrace(IEnumerable<StackFrame>)

Vytvoří trasování zásobníku ze sady StackFrame objektů.

StackTrace(StackFrame)

Inicializuje novou instanci StackTrace třídy, která obsahuje jeden rámec.

StackTrace(Exception)

Inicializuje novou instanci StackTrace třídy pomocí zadaného objektu výjimky.

StackTrace(Int32)

Inicializuje novou instanci StackTrace třídy z rámce volajícího a přeskočí zadaný počet snímků.

StackTrace(Exception, Int32)

Inicializuje novou instanci StackTrace třídy pomocí zadaného objektu výjimky a přeskočí zadaný počet snímků.

StackTrace(Int32, Boolean)

Inicializuje novou instanci StackTrace třídy z rámce volajícího, přeskočí zadaný počet snímků a volitelně zachytí informace o zdroji.

StackTrace(Thread, Boolean)
Zastaralé.

Inicializuje novou instanci StackTrace třídy pro konkrétní vlákno, volitelně zaznamenává informace o zdroji.

Nepoužívejte toto přetížení konstruktoru.

StackTrace(Exception, Int32, Boolean)

Inicializuje novou instanci StackTrace třídy pomocí poskytnutého objektu výjimky, přeskočí zadaný počet snímků a volitelně zachytí informace o zdroji.

StackTrace(Exception, Boolean)

Inicializuje novou instanci StackTrace třídy pomocí poskytnutého objektu výjimky a volitelně zachytává informace o zdroji.

StackTrace()

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy z rámce volajícího.

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

Příklady

Následující příklad kódu zobrazuje první a poslední volání funkce v trasování zásobníku.

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

Poznámky

Objekt StackTrace se vytvoří s aktuálním vláknem volajícího a neobsahuje název souboru, číslo řádku ani informace o sloupci.

Tento konstruktor bez parametrů použijte, pokud chcete úplné trasování pouze se souhrnnými informacemi o zásobníku volání.

Platí pro

StackTrace(Boolean)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy z rámce volajícího, volitelně zachytává informace o zdroji.

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

Parametry

fNeedFileInfo
Boolean

truek zachycení názvu souboru, čísla řádku a čísla sloupce; v opačném případě . false

Příklady

Následující příklad kódu ukazuje různé StackTrace metody konstruktoru.

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

Poznámky

Vytvoří StackTrace se s aktuálním vláknem volajícího.

Platí pro

StackTrace(IEnumerable<StackFrame>)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Vytvoří trasování zásobníku ze sady StackFrame objektů.

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))

Parametry

frames
IEnumerable<StackFrame>

Sada rámců zásobníku, které by se měly vyskytovat v trasování zásobníku.

Platí pro

StackTrace(StackFrame)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy, která obsahuje jeden rámec.

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)

Parametry

frame
StackFrame

Rámeček, který StackTrace by měl objekt obsahovat.

Příklady

Následující příklad kódu zapisuje informace o trasování zásobníku do položky protokolu událostí.

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)

Poznámky

Tento konstruktor použijte, pokud nechcete mít režii úplného trasování zásobníku.

Viz také

Platí pro

StackTrace(Exception)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy pomocí zadaného objektu výjimky.

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

Parametry

e
Exception

Objekt výjimky, ze kterého se má vytvořit trasování zásobníku.

Výjimky

Parametr e je null.

Poznámky

Objekt StackTrace se vytvoří s aktuálním vláknem volajícího a neobsahuje název souboru, číslo řádku ani informace o sloupci.

Výsledné trasování zásobníku popisuje zásobník v době výjimky.

Viz také

Platí pro

StackTrace(Int32)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy z rámce volajícího a přeskočí zadaný počet snímků.

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

Parametry

skipFrames
Int32

Počet snímků nad zásobníkem, ze kterých se má spustit trasování.

Výjimky

Parametr skipFrames je záporný.

Poznámky

Objekt StackTrace se vytvoří s aktuálním vláknem volajícího a neobsahuje název souboru, číslo řádku ani informace o sloupci.

Pokud je počet snímků, které se mají přeskočit, větší nebo roven celkovému počtu snímků v zásobníku volání v době vytvoření instance, StackTrace nebude obsahovat žádné snímky.

Platí pro

StackTrace(Exception, Int32)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy pomocí zadaného objektu výjimky a přeskočí zadaný počet snímků.

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)

Parametry

e
Exception

Objekt výjimky, ze kterého se má vytvořit trasování zásobníku.

skipFrames
Int32

Počet snímků nad zásobníkem, ze kterých se má spustit trasování.

Výjimky

Parametr e je null.

Parametr skipFrames je záporný.

Poznámky

Soubor StackTrace neobsahuje název souboru, číslo řádku ani informace o sloupci.

Výsledné trasování zásobníku popisuje zásobník v době výjimky.

Pokud je počet snímků, které se mají přeskočit, větší nebo roven celkovému počtu snímků v zásobníku volání v době vytvoření instance, StackTrace nebude obsahovat žádné snímky.

Viz také

Platí pro

StackTrace(Int32, Boolean)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy z rámce volajícího, přeskočí zadaný počet snímků a volitelně zachytí informace o zdroji.

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)

Parametry

skipFrames
Int32

Počet snímků nad zásobníkem, ze kterých se má spustit trasování.

fNeedFileInfo
Boolean

truek zachycení názvu souboru, čísla řádku a čísla sloupce; v opačném případě . false

Výjimky

Parametr skipFrames je záporný.

Příklady

Následující příklad kódu ukazuje různé StackTrace metody konstruktoru.

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

Poznámky

Pokud je počet snímků, které se mají přeskočit, větší nebo roven celkovému počtu snímků v zásobníku volání v době vytvoření instance, StackTrace nebude obsahovat žádné snímky.

Platí pro

StackTrace(Thread, Boolean)

Upozornění

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

Inicializuje novou instanci StackTrace třídy pro konkrétní vlákno, volitelně zaznamenává informace o zdroji.

Nepoužívejte toto přetížení konstruktoru.

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)

Parametry

targetThread
Thread

Vlákno, jehož trasování zásobníku je požadováno.

needFileInfo
Boolean

truek zachycení názvu souboru, čísla řádku a čísla sloupce; v opačném případě . false

Atributy

Výjimky

Vlákno targetThread není pozastaveno.

Poznámky

Důležité

Nepoužívejte tento konstruktor. Je zastaralý a neexistuje žádná doporučená alternativa. Když pozastavíte vlákno, nemáte žádný způsob, jak zjistit, jaký kód se spouští, a k zablokování může dojít velmi snadno. Pokud například během vyhodnocení oprávnění zabezpečení pozastavíte vlákno, které obsahuje zámky, můžou být zablokovaná další vlákna v objektu AppDomain . Pokud pozastavíte vlákno při provádění konstruktoru třídy, ostatní vlákna v objektu AppDomain , který se pokusí tuto třídu použít, jsou blokovány.

Viz také

Platí pro

StackTrace(Exception, Int32, Boolean)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy pomocí poskytnutého objektu výjimky, přeskočí zadaný počet snímků a volitelně zachytí informace o zdroji.

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)

Parametry

e
Exception

Objekt výjimky, ze kterého se má vytvořit trasování zásobníku.

skipFrames
Int32

Počet snímků nad zásobníkem, ze kterých se má spustit trasování.

fNeedFileInfo
Boolean

truek zachycení názvu souboru, čísla řádku a čísla sloupce; v opačném případě . false

Výjimky

Parametr e je null.

Parametr skipFrames je záporný.

Poznámky

Výsledné trasování zásobníku popisuje zásobník v době výjimky.

Pokud je počet snímků, které se mají přeskočit, větší nebo roven celkovému počtu snímků v zásobníku volání v době vytvoření instance, StackTrace nebude obsahovat žádné snímky.

Viz také

Platí pro

StackTrace(Exception, Boolean)

Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs
Zdroj:
StackTrace.cs

Inicializuje novou instanci StackTrace třídy pomocí poskytnutého objektu výjimky a volitelně zachytává informace o zdroji.

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)

Parametry

exceptione
Exception

Objekt výjimky, ze kterého se má vytvořit trasování zásobníku.

needFileInfofNeedFileInfo
Boolean

truek zachycení názvu souboru, čísla řádku a čísla sloupce; v opačném případě . false

Výjimky

Parametr e je null.

Poznámky

Výsledné trasování zásobníku popisuje zásobník v době výjimky.

Viz také

Platí pro