Lire en anglais

Partager via


Exception.StackTrace Propriété

Définition

Obtient une représentation sous forme de chaîne des frames immédiats sur la pile des appels.

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

Valeur de propriété

Chaîne qui décrit les frames immédiates de la pile des appels. Si aucune trace de pile n’est disponible (par exemple, avant le déroulement de la pile à partir d’une throw instruction), la valeur est null.

Implémente

Exemples

L’exemple de code suivant lève un Exception , puis l’intercepte et affiche une trace de pile à l’aide de la StackTrace propriété .

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

Remarques

La pile d'exécution assure le suivi de toutes les méthodes qui sont en cours d'exécution à un moment donné. La trace des appels de méthodes s'appelle la trace de la pile. La liste des traces de pile permet de suivre la pile des appels au numéro de ligne dans la méthode où l’exception se produit.

La StackTrace propriété retourne les images de la pile d’appels qui proviennent de l’emplacement où l’exception a été levée. Vous pouvez obtenir des informations sur les trames supplémentaires dans la pile d’appels en créant une nouvelle instance de la System.Diagnostics.StackTrace classe et en utilisant sa StackTrace.ToString méthode.

Le Common Language Runtime (CLR) met à jour la trace de pile chaque fois qu’une exception est levée dans le code d’application (à l’aide de la throw mot clé). Si l’exception a été rethrown dans une méthode qui est différente de la méthode où elle a été levée à l’origine, la trace de pile contient à la fois l’emplacement dans la méthode où l’exception a été levée à l’origine et l’emplacement dans la méthode où l’exception a été réapprète. Si l’exception est levée et qu’elle est réinjectée ultérieurement, dans la même méthode, la trace de pile contient uniquement l’emplacement où l’exception a été ressaisie et n’inclut pas l’emplacement où l’exception a été levée à l’origine.

La StackTrace propriété peut ne pas signaler autant d’appels de méthode que prévu en raison de transformations de code, telles que l’inlining, qui se produisent pendant l’optimisation.

Notes pour les héritiers

La StackTrace propriété est remplacée dans les classes qui nécessitent un contrôle sur le contenu ou le format de la trace de pile.

Par défaut, la trace de pile est capturée immédiatement avant la levée d’un objet d’exception. Permet StackTrace d’obtenir des informations de trace de pile quand aucune exception n’est levée.

S’applique à

Produit Versions
.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
.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

Voir aussi