Auf Englisch lesen

Freigeben über


Exception.StackTrace Eigenschaft

Definition

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.

C#
public virtual string StackTrace { get; }
C#
public virtual string? StackTrace { get; }

Eigenschaftswert

Eine Zeichenfolge, die die unmittelbaren Frames der Aufrufliste beschreibt. Wenn keine Stapelablaufverfolgung verfügbar ist (z. B. vor dem Stapelentladung aus einer throw Anweisung), ist nullder Wert .

Implementiert

Beispiele

Das folgende Codebeispiel löst ein Exception aus, fängt es dann ab und zeigt eine Stapelablaufverfolgung mithilfe der StackTrace -Eigenschaft an.

C#
// Example for the Exception.HelpLink, Exception.Source,
// Exception.StackTrace, and Exception.TargetSite properties.
using System;

namespace NDP_UE_CS
{
    // Derive an exception; the constructor sets the HelpLink and
    // Source properties.
    class LogTableOverflowException : Exception
    {
        const string overflowMessage = "The log table has overflowed.";

        public LogTableOverflowException(
            string auxMessage, Exception inner ) :
                base( String.Format( "{0} - {1}",
                    overflowMessage, auxMessage ), inner )
        {
            this.HelpLink = "https://learn.microsoft.com";
            this.Source = "Exception_Class_Samples";
        }
    }

    class LogTable
    {
        public LogTable( int numElements )
        {
            logArea = new string[ numElements ];
            elemInUse = 0;
        }

        protected string[ ] logArea;
        protected int       elemInUse;

        // The AddRecord method throws a derived exception if
        // the array bounds exception is caught.
        public    int       AddRecord( string newRecord )
        {
            try
            {
                logArea[ elemInUse ] = newRecord;
                return elemInUse++;
            }
            catch( Exception e )
            {
                throw new LogTableOverflowException(
                    String.Format( "Record \"{0}\" was not logged.",
                        newRecord ), e );
            }
        }
    }

    class OverflowDemo
    {
        // Create a log table and force an overflow.
        public static void Main()
        {
            LogTable log = new LogTable( 4 );

            Console.WriteLine(
                "This example of \n   Exception.Message, \n" +
                "   Exception.HelpLink, \n   Exception.Source, \n" +
                "   Exception.StackTrace, and \n   Exception." +
                "TargetSite \ngenerates the following output." );

            try
            {
                for( int count = 1; ; count++ )
                {
                    log.AddRecord(
                        String.Format(
                            "Log record number {0}", count ) );
                }
            }
            catch( Exception ex )
            {
                Console.WriteLine( "\nMessage ---\n{0}", ex.Message );
                Console.WriteLine(
                    "\nHelpLink ---\n{0}", ex.HelpLink );
                Console.WriteLine( "\nSource ---\n{0}", ex.Source );
                Console.WriteLine(
                    "\nStackTrace ---\n{0}", ex.StackTrace );
                Console.WriteLine(
                    "\nTargetSite ---\n{0}", ex.TargetSite );
            }
        }
    }
}

/*
This example of
   Exception.Message,
   Exception.HelpLink,
   Exception.Source,
   Exception.StackTrace, and
   Exception.TargetSite
generates the following output.

Message ---
The log table has overflowed. - Record "Log record number 5" was not logged.

HelpLink ---
https://learn.microsoft.com

Source ---
Exception_Class_Samples

StackTrace ---
   at NDP_UE_CS.LogTable.AddRecord(String newRecord)
   at NDP_UE_CS.OverflowDemo.Main()

TargetSite ---
Int32 AddRecord(System.String)
*/

Hinweise

Der Ausführungsstapel verfolgt alle Methoden, die zu einem angegebenen Zeitpunkt gerade ausgeführt werden. Ein Überwachungsprotokoll der Methodenaufrufe wird als Stapelüberwachung bezeichnet. Die Stapelablaufverfolgungsliste bietet eine Möglichkeit, dem Aufrufstapel der Zeilennummer in der Methode zu folgen, in der die Ausnahme auftritt.

Die StackTrace -Eigenschaft gibt die Frames des Aufrufstapels zurück, die an der Stelle stammen, an der die Ausnahme ausgelöst wurde. Sie können Informationen zu zusätzlichen Frames im Aufrufstapel abrufen, indem Sie eine neue instance der Klasse erstellen und deren System.Diagnostics.StackTraceStackTrace.ToString Methode verwenden.

Die Common Language Runtime (CLR) aktualisiert die Stapelablaufverfolgung, wenn eine Ausnahme im Anwendungscode ausgelöst wird (mithilfe des throw Schlüsselwort (keyword)). Wenn die Ausnahme in einer Methode erneut ausgeführt wurde, die sich von der Methode unterscheidet, in der sie ursprünglich ausgelöst wurde, enthält die Stapelablaufverfolgung sowohl die Position in der Methode, an der die Ausnahme ursprünglich ausgelöst wurde, als auch den Speicherort in der Methode, an der die Ausnahme erneut ausgelöst wurde. Wenn die Ausnahme ausgelöst und später erneut ausgelöst wird, enthält die Stapelablaufverfolgung in derselben Methode nur den Speicherort, an dem die Ausnahme erneut ausgelöst wurde, und nicht den Speicherort, an dem die Ausnahme ursprünglich ausgelöst wurde.

Die StackTrace -Eigenschaft meldet möglicherweise nicht so viele Methodenaufrufe wie erwartet aufgrund von Codetransformationen, z. B. Inlining, die während der Optimierung auftreten.

Hinweise für Vererber

Die StackTrace -Eigenschaft wird in Klassen überschrieben, die die Kontrolle über den Inhalt oder das Format der Stapelablaufverfolgung erfordern.

Standardmäßig wird die Stapelablaufverfolgung unmittelbar vor dem Auslösen eines Ausnahmeobjekts erfasst. Verwenden Sie StackTrace zum Abrufen von Stapelablaufverfolgungsinformationen, wenn keine Ausnahme ausgelöst wird.

Gilt für:

Produkt Versionen
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Weitere Informationen