Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Proprietà Exception.StackTrace

 

Data di pubblicazione: ottobre 2016

Ottiene una rappresentazione in forma di stringa dei frame nello stack di chiamate.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

public virtual string StackTrace { get; }

Valore proprietà

Type: System.String

Stringa in cui vengono descritti i frame immediati dello stack di chiamate.

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. La voce di traccia dello stack fornisce un modo per seguire lo stack di chiamate al numero di riga nel metodo in cui si verifica l'eccezione.

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

Common language runtime (CLR) aggiorna la traccia dello stack ogni volta che viene generata un'eccezione nel codice dell'applicazione (utilizzando il throw parola chiave). Se l'eccezione è stata rigenerata in un metodo che è diverso da quello in cui è stata generata in origine, la traccia stack contiene il percorso nel metodo in cui è stato originariamente generata l'eccezione e il percorso nel metodo in cui è stato nuovamente generata l'eccezione. Se l'eccezione viene generata e in seguito rigenerata nello stesso metodo, la traccia stack contiene solo il percorso in cui l'eccezione è stata rigenerata e non include il percorso in cui è stato originariamente generata l'eccezione.

Il StackTrace proprietà potrebbe non restituire il numero di chiamate di metodo come previsto a causa di trasformazioni di codice, ad esempio inline, che si verificano durante l'ottimizzazione.

Note per gli eredi:

Il StackTrace è sottoposta a override in classi che richiedono il controllo del contenuto di una traccia dello stack e formato.

Per impostazione predefinita, la traccia dello stack viene creata immediatamente prima un oggetto eccezione viene generata un'eccezione. Utilizzare Environment.StackTrace per ottenere informazioni sulla traccia dello stack se non viene generata alcuna eccezione.

Nell'esempio di codice riportato di seguito viene generata una Exception e rileva e visualizza una traccia dello stack utilizzando il StackTrace proprietà.

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

Universal Windows Platform
Disponibile da 8
.NET Framework
Disponibile da 1.1
Libreria di classi portabile
Supportato in: piattaforme .NET portabili
Silverlight
Disponibile da 2.0
Windows Phone Silverlight
Disponibile da 7.0
Windows Phone
Disponibile da 8.1
Torna all'inizio
Mostra: