Dieser Artikel wurde maschinell übersetzt. Wenn Sie die englische Version des Artikels anzeigen möchten, aktivieren Sie das Kontrollkästchen Englisch. Sie können den englischen Text auch in einem Popupfenster anzeigen, indem Sie den Mauszeiger über den Text bewegen.
Übersetzung
Englisch

Exception.StackTrace-Eigenschaft

 

Veröffentlicht: Oktober 2016

Ruft eine Zeichenfolgendarstellung der unmittelbaren Frames in der Aufrufliste ab.

Namespace:   System
Assembly:  mscorlib (in mscorlib.dll)

public virtual string StackTrace { get; }

Eigenschaftswert

Type: System.String

Eine Zeichenfolge, die die unmittelbaren Frames der Aufrufliste beschreibt.

Der Ausführungsstapel verfolgt alle Methoden, die zu einem angegebenen Zeitpunkt gerade ausgeführt werden. Ein Überwachungsprotokoll der Methodenaufrufe wird als Stapelüberwachung bezeichnet. Der Stapel-Trace-Angebot bietet eine Möglichkeit, befolgen die Aufrufliste der Zeilennummer in der Methode, in der die Ausnahme auftritt.

Die StackTrace Eigenschaft gibt die Frames der Aufrufliste, die am Speicherort stammen, in dem die Ausnahme ausgelöst wurde. Erhalten Sie Informationen zu zusätzlichen Frames in der Aufrufliste durch Erstellen einer neuen Instanz der System.Diagnostics.StackTrace -Klasse festlegen und seine StackTrace.ToString Methode.

Die common Language Runtime (CLR) aktualisiert Stapelrahmen, sobald im Anwendungscode eine Ausnahme ausgelöst wird (mithilfe der throw Schlüsselwort). Wenn die Ausnahme in einer Methode erneut, die unterscheidet sich von der Methode ausgelöst wurde, in dem es ursprünglich ausgelöst wurde, enthält die stapelüberwachung sowohl den Speicherort in der Methode, in dem die Ausnahme ursprünglich ausgelöst wurde, und den Speicherort in der Methode, in dem die Ausnahme erneut ausgelöst wurde. Wenn die Ausnahme ausgelöst wird, und später erneut ausgelöst, in der gleichen Methode enthält die stapelüberwachung nur den Speicherort, in dem die Ausnahme erneut ausgelöst wurde, und schließt nicht den Speicherort, in dem die Ausnahme ursprünglich ausgelöst wurde.

Die StackTrace Eigenschaft meldet möglicherweise nicht so viele Methodenaufrufe erwartungsgemäß aufgrund Codetransformationen, z. B. inlining dar, die während der Optimierung auftreten.

Hinweise für Vererber:

Die StackTrace Eigenschaft in Klassen, die Kontrolle über den Stapel Ablaufverfolgungsinhalt oder das Format erfordern überschrieben wird.

Standardmäßig wird die stapelüberwachung erfasst, unmittelbar bevor ein Exception-Objekt ausgelöst wird. Verwendung Environment.StackTrace Stapelüberwachungsinformationen abgerufen, wenn keine Ausnahme ausgelöst wird.

Das folgende Codebeispiel löst das Beispiel ein Exception abgefangen und zeigt einen Stapel datenzugriffsablaufverfolgung unter Verwendung der StackTrace Eigenschaft.

// 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 = "http://msdn.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 ---
http://msdn.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)
*/

Universelle Windows-Plattform
Verfügbar seit 8
.NET Framework
Verfügbar seit 1.1
Portierbare Klassenbibliothek
Unterstützt in: portierbare .NET-Plattformen
Silverlight
Verfügbar seit 2.0
Windows Phone Silverlight
Verfügbar seit 7.0
Windows Phone
Verfügbar seit 8.1
Zurück zum Anfang
Anzeigen: