Exception.StackTrace Właściwość

Definicja

Pobiera reprezentację ciągu natychmiastowych ramek na stosie wywołań.

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

Wartość właściwości

Ciąg opisujący bezpośrednie ramki stosu wywołań. Jeśli ślad stosu nie jest dostępny (na przykład przed odwijaniem stosu throw z instrukcji ), wartość to null.

Implementuje

Przykłady

Poniższy przykład kodu zgłasza element Exception , a następnie przechwytuje go i wyświetla ślad stosu StackTrace przy użyciu właściwości .

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

Uwagi

Stos wykonywania śledzi wszystkie metody, które są w wykonaniu w danym momencie. Ślad wywołań metody jest nazywany śladem stosu. Lista śledzenia stosu umożliwia śledzenie stosu wywołań do numeru wiersza w metodzie, w której występuje wyjątek.

Właściwość StackTrace zwraca ramki stosu wywołań pochodzące z lokalizacji, w której został zgłoszony wyjątek. Informacje o dodatkowych ramkach w stosie wywołań można uzyskać, tworząc nowe wystąpienie System.Diagnostics.StackTrace klasy i używając jej StackTrace.ToString metody.

Środowisko uruchomieniowe języka wspólnego (CLR) aktualizuje ślad stosu za każdym razem, gdy w kodzie aplikacji jest zgłaszany wyjątek (przy użyciu słowa kluczowego throw ). Jeśli wyjątek został ponownie zgłoszony w metodzie innej niż metoda, w której został pierwotnie zgłoszony, ślad stosu zawiera zarówno lokalizację w metodzie, w której został pierwotnie zgłoszony wyjątek, jak i lokalizację w metodzie, w której wyjątek został ponownie zgłoszony. Jeśli wyjątek zostanie zgłoszony, a później ponownie w tej samej metodzie, ślad stosu zawiera tylko lokalizację, w której wyjątek został ponownie zgłoszony i nie zawiera lokalizacji, w której wyjątek został pierwotnie zgłoszony.

Właściwość StackTrace może nie zgłaszać tylu wywołań metod zgodnie z oczekiwaniami z powodu przekształceń kodu, takich jak podkreślenie, które występują podczas optymalizacji.

Uwagi dotyczące dziedziczenia

Właściwość StackTrace jest zastępowana w klasach, które wymagają kontroli nad zawartością lub formatem śledzenia stosu.

Domyślnie ślad stosu jest przechwytywany bezpośrednio przed zgłoszeniem obiektu wyjątku. Służy StackTrace do pobierania informacji śledzenia stosu, gdy nie jest zgłaszany żaden wyjątek.

Dotyczy

Produkt Wersje
.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

Zobacz też