Exception.StackTrace Proprietà

Definizione

Ottiene una rappresentazione di stringa dei frame immediati nello stack di chiamate.

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

Valore della proprietà

Stringa in cui vengono descritti i frame immediati dello stack di chiamate. Se non è disponibile alcuna traccia dello stack , ad esempio prima di rimuovere lo stack da un'istruzione throw , il valore è null.

Implementazioni

Esempio

L'esempio di codice seguente genera un Exception oggetto e quindi lo rileva e visualizza una traccia dello stack usando la StackTrace proprietà .

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

Commenti

Lo stack di esecuzione tiene traccia di tutti i metodi in esecuzione in un determinato istante. La traccia delle chiamate ai metodi viene denominata traccia dello stack. L'elenco di traccia dello stack consente di seguire lo stack di chiamate al numero di riga nel metodo in cui si verifica l'eccezione.

La StackTrace proprietà restituisce i frame dello stack di chiamate che hanno origine nella posizione in cui è stata generata l'eccezione. È possibile ottenere informazioni su frame aggiuntivi nello stack di chiamate creando una nuova istanza della System.Diagnostics.StackTrace classe e usando il StackTrace.ToString relativo metodo.

Common Language Runtime (CLR) aggiorna la traccia dello stack ogni volta che viene generata un'eccezione nel codice dell'applicazione (usando la throw parola chiave). Se l'eccezione è stata rethrown in un metodo diverso dal metodo in cui è stata generata originariamente, la traccia dello stack contiene entrambe la posizione nel metodo in cui è stata generata l'eccezione originariamente e la posizione nel metodo in cui è stata generata l'eccezione. Se viene generata l'eccezione e successivamente rethrown, nello stesso metodo, la traccia dello stack contiene solo la posizione in cui è stata generata l'eccezione e non include la posizione in cui è stata generata l'eccezione.

La StackTrace proprietà potrebbe non segnalare quante chiamate di metodo previste a causa di trasformazioni di codice, ad esempio l'inlining, che si verificano durante l'ottimizzazione.

Note per gli eredi

La StackTrace proprietà viene sottoposta a override nelle classi che richiedono il controllo sul contenuto o sul formato di traccia dello stack.

Per impostazione predefinita, la traccia dello stack viene acquisita immediatamente prima che venga generato un oggetto eccezione. Usare StackTrace per ottenere informazioni sulla traccia dello stack quando non viene generata alcuna eccezione.

Si applica a

Prodotto Versioni
.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

Vedi anche