StackTrace Klasse

Definition

Stellt einen Stacktrace dar, d. h. eine geordnete Sammlung von einem oder mehreren Stack-Frames.

public ref class StackTrace sealed
public ref class StackTrace
public sealed class StackTrace
[System.Serializable]
public class StackTrace
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class StackTrace
public class StackTrace
type StackTrace = class
[<System.Serializable>]
type StackTrace = class
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type StackTrace = class
Public NotInheritable Class StackTrace
Public Class StackTrace
Vererbung
StackTrace
Attribute

Beispiele

Die folgende Konsolenanwendung veranschaulicht, wie Sie eine einfache StackTrace und durchlaufende Frames erstellen, um Debugging- und Diagnoseinformationen abzurufen.

using System;
using System.Diagnostics;

class StackTraceSample
{
    [STAThread]
    static void Main(string[] args)
    {
        StackTraceSample sample = new StackTraceSample();
        try
        {
            sample.MyPublicMethod();
        }
        catch (Exception)
        {
            // Create a StackTrace that captures
            // filename, line number, and column
            // information for the current thread.
            StackTrace st = new StackTrace(true);
            for(int i =0; i< st.FrameCount; i++ )
            {
                // Note that high up the call stack, there is only
                // one stack frame.
                StackFrame sf = st.GetFrame(i);
                Console.WriteLine();
                Console.WriteLine("High up the call stack, Method: {0}",
                    sf.GetMethod());

                Console.WriteLine("High up the call stack, Line Number: {0}",
                    sf.GetFileLineNumber());
            }
        }
    }

    public void MyPublicMethod ()
    {
        MyProtectedMethod();
    }

    protected void MyProtectedMethod ()
    {
        MyInternalClass mic = new MyInternalClass();
        mic.ThrowsException();
    }

    class MyInternalClass
    {
        public void ThrowsException()
        {
            try
            {
                throw new Exception("A problem was encountered.");
            }
            catch (Exception e)
            {
                // Create a StackTrace that captures filename,
                // line number and column information.
                StackTrace st = new StackTrace(true);
                string stackIndent = "";
                for(int i =0; i< st.FrameCount; i++ )
                {
                    // Note that at this level, there are four
                    // stack frames, one for each method invocation.
                    StackFrame sf = st.GetFrame(i);
                    Console.WriteLine();
                    Console.WriteLine(stackIndent + " Method: {0}",
                        sf.GetMethod() );
                    Console.WriteLine(  stackIndent + " File: {0}",
                        sf.GetFileName());
                    Console.WriteLine(  stackIndent + " Line Number: {0}",
                        sf.GetFileLineNumber());
                    stackIndent += "  ";
                }
                throw e;
            }
        }
    }
}

/*
This console application produces the following output when
compiled with the Debug configuration.

   Method: Void ThrowsException()
   File: c:\samples\stacktraceframe\myclass.cs
   Line Number: 59

     Method: Void MyProtectedMethod()
     File: c:\samples\stacktraceframe\myclass.cs
     Line Number: 45

       Method: Void MyPublicMethod()
       File: c:\samples\stacktraceframe\myclass.cs
       Line Number: 39

         Method: Void Main(System.String[])
         File: c:\samples\stacktraceframe\myclass.cs
         Line Number: 13

  High up the call stack, Method: Void Main(System.String[])
  High up the call stack, Line Number: 20


This console application produces the following output when
compiled with the Release configuration.

   Method: Void ThrowsException()
   File:
   Line Number: 0

     Method: Void Main(System.String[])
     File:
     Line Number: 0

  High up the call stack, Method: Void Main(System.String[])
  High up the call stack, Line Number: 0

*/
Imports System.Diagnostics

Class StackTraceSample
   
    <STAThread()>  _
    Public Shared Sub Main()

        Dim sample As New StackTraceSample()
        Try
   
            sample.MyPublicMethod()
        Catch
            ' Create a StackTrace that captures
            ' filename, line number, and column
            ' information for the current thread.
            Dim st As New StackTrace(True)
            Dim i As Integer

            For i = 0 To st.FrameCount - 1

                ' Note that high up the call stack, there is only
                ' one stack frame.
                Dim sf As StackFrame = st.GetFrame(i)
                Console.WriteLine()
                Console.WriteLine("High up the call stack, Method: {0}", _
                    sf.GetMethod())
            
                Console.WriteLine("High up the call stack, Line Number: {0}", _
                    sf.GetFileLineNumber())
            Next i
        End Try
    End Sub
   
   Public Sub MyPublicMethod()
      MyProtectedMethod()
   End Sub
    
   Protected Sub MyProtectedMethod()
      Dim mic As New MyInternalClass()
      mic.ThrowsException()
   End Sub
   
   
   Class MyInternalClass
      
      Public Sub ThrowsException()
         Try
            Throw New Exception("A problem was encountered.")
         Catch e As Exception

            ' Create a StackTrace that captures filename,
            ' line number and column information.
            Dim st As New StackTrace(True)

            Dim stackIndent As String = ""
            Dim i As Integer
            For i = 0 To st.FrameCount - 1
               ' Note that at this level, there are four
               ' stack frames, one for each method invocation.
               Dim sf As StackFrame = st.GetFrame(i)
               Console.WriteLine()
               Console.WriteLine(stackIndent + " Method: {0}", _
                   sf.GetMethod())
               Console.WriteLine(stackIndent + " File: {0}", _
                   sf.GetFileName())
               Console.WriteLine(stackIndent + " Line Number: {0}", _
                   sf.GetFileLineNumber())
               stackIndent += "  "
            Next i
            Throw e
         End Try
      End Sub
   End Class
End Class


' This console application produces the following output when
' compiled with the Debug configuration.
'   
'    Method: Void ThrowsException()
'    File: c:\pp\samples\stacktraceframe\myclass.vb
'    Line Number: 55
' 
'      Method: Void MyProtectedMethod()
'      File: c:\pp\samples\stacktraceframe\myclass.vb
'      Line Number: 42
' 
'        Method: Void MyPublicMethod()
'        File: c:\pp\samples\stacktraceframe\myclass.vb
'        Line Number: 37
' 
'          Method: Void Main(System.String[])
'          File: c:\pp\samples\stacktraceframe\myclass.vb
'          Line Number: 13
' 
'   High up the call stack, Method: Void Main(System.String[])
'   High up the call stack, Line Number: 18
' 
' 
' This console application produces the following output when
' compiled with the Release configuration.
' 
'    Method: Void ThrowsException()
'    File:
'    Line Number: 0
' 
'      Method: Void Main(System.String[])
'      File:
'      Line Number: 0
' 
'   High up the call stack, Method: Void Main()
'   High up the call stack, Line Number: 0
'

Hinweise

StackTrace Informationen werden mit Debugbuildkonfigurationen am informativsten sein. Standardmäßig enthalten Debugbuilds Debugsymbole, während Releasebuilds nicht. Die Debugsymbole enthalten die meisten Datei-, Methodennamen-, Zeilennummer- und Spalteninformationen, die beim Erstellen StackFrame und StackTrace Von Objekten verwendet werden.

StackTrace kann aufgrund von Codetransformationen, die während der Optimierung auftreten, nicht so viele Methodenaufrufe wie erwartet melden.

Konstruktoren

Name Beschreibung
StackTrace()

Initialisiert eine neue Instanz der StackTrace Klasse aus dem Frame des Aufrufers.

StackTrace(Boolean)

Initialisiert eine neue Instanz der StackTrace Klasse aus dem Frame des Aufrufers, optional erfassen Sie Quellinformationen.

StackTrace(Exception, Boolean)

Initialisiert eine neue Instanz der StackTrace Klasse, wobei das bereitgestellte Ausnahmeobjekt verwendet wird und optional Quellinformationen erfasst werden.

StackTrace(Exception, Int32, Boolean)

Initialisiert eine neue Instanz der Klasse mithilfe des StackTrace bereitgestellten Ausnahmeobjekts, überspringt die angegebene Anzahl von Frames und erfasst optional Quellinformationen.

StackTrace(Exception, Int32)

Initialisiert eine neue Instanz der StackTrace Klasse mithilfe des bereitgestellten Ausnahmeobjekts und überspringt die angegebene Anzahl von Frames.

StackTrace(Exception)

Initialisiert eine neue Instanz der StackTrace Klasse mithilfe des bereitgestellten Ausnahmeobjekts.

StackTrace(Int32, Boolean)

Initialisiert eine neue Instanz der StackTrace Klasse aus dem Frame des Aufrufers, überspringt die angegebene Anzahl von Frames und erfasst optional Quellinformationen.

StackTrace(Int32)

Initialisiert eine neue Instanz der StackTrace Klasse aus dem Frame des Aufrufers, wobei die angegebene Anzahl von Frames übersprungen wird.

StackTrace(StackFrame)

Initialisiert eine neue Instanz der Klasse, die StackTrace einen einzelnen Frame enthält.

StackTrace(Thread, Boolean)
Veraltet.

Initialisiert eine neue Instanz der StackTrace Klasse für einen bestimmten Thread und erfasst optional Quellinformationen.

Verwenden Sie diese Konstruktorüberladung nicht.

Felder

Name Beschreibung
METHODS_TO_SKIP

Definiert die Standardeinstellung für die Anzahl der Methoden, die aus der Stapelablaufverfolgung weggelassen werden sollen. Dieses Feld ist konstant.

Eigenschaften

Name Beschreibung
FrameCount

Ruft die Anzahl der Frames in der Stapelablaufverfolgung ab.

Methoden

Name Beschreibung
Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
GetFrame(Int32)

Ruft den angegebenen Stapelrahmen ab.

GetFrames()

Gibt eine Kopie aller Stapelframes in der aktuellen Stapelablaufverfolgung zurück.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
ToString()

Erstellt eine lesbare Darstellung der Stapelablaufverfolgung.

Gilt für:

Weitere Informationen