Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Exception.StackTrace propriété

 

Date de publication : novembre 2016

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

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public virtual string StackTrace { get; }

Valeur de propriété

Type: System.String

Chaîne qui décrit les frames immédiates de la pile des appels.

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 de trace de pile offre un moyen de suivre la pile des appels au numéro de ligne dans la méthode où l’exception se produit.

Le StackTrace propriété retourne les frames de la pile des appels qui proviennent de l’emplacement où l’exception a été levée. Vous pouvez obtenir des informations sur les frames supplémentaires dans la pile des appels en créant une nouvelle instance de la System.Diagnostics.StackTrace classe et à l’aide de son 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é levée dans une méthode qui est différente de celle où il a été levée à l’origine, la trace de pile contient à la fois l’emplacement où l’exception a été levée initialement dans la méthode et l’emplacement où l’exception a été levée dans la méthode. Si l’exception est levée et levée ensuite à nouveau dans la même méthode, la trace de pile contient uniquement l’emplacement où l’exception a été levée et n’inclut pas l’emplacement où l’exception a été levée initialement.

Le StackTrace propriété peut ne pas rapporter autant d’appels de méthode comme prévu en raison des transformations de code, tel qu’incorporation (inlining), qui se produisent pendant l’optimisation.

Remarques à l’attention des héritiers :

Le StackTrace est substituée dans les classes qui requièrent un contrôle sur le format ou le contenu de trace de pile.

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

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

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

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 1.1
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: