Exception.StackTrace Propriedade

Definição

Obtém uma representação de cadeia de caracteres de quadros imediatos na pilha de chamadas.

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

Valor da propriedade

Uma cadeia de caracteres que descreve os quadros imediatos da pilha de chamadas. Se nenhum rastreamento de pilha estiver disponível (como antes do desenrolamento da pilha de uma throw instrução), o valor será null.

Implementações

Exemplos

O exemplo de código a seguir gera um Exception e o captura e exibe um rastreamento de pilha usando a StackTrace propriedade .

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

Comentários

A pilha de execução controla todos os métodos que estão em execução em um determinado instante. Um rastreamento das chamadas de método é chamado de rastreamento de pilha. A listagem de rastreamento de pilha fornece uma maneira de seguir a pilha de chamadas até o número de linha no método em que a exceção ocorre.

A StackTrace propriedade retorna os quadros da pilha de chamadas originadas no local em que a exceção foi gerada. Você pode obter informações sobre quadros adicionais na pilha de chamadas criando uma nova instância da System.Diagnostics.StackTrace classe e usando seu StackTrace.ToString método .

O CLR (Common Language Runtime) atualiza o rastreamento de pilha sempre que uma exceção é gerada no código do aplicativo (usando o throw palavra-chave). Se a exceção foi gerada novamente em um método diferente do método em que foi originalmente gerada, o rastreamento de pilha conterá o local no método em que a exceção foi originalmente gerada e o local no método em que a exceção foi gerada novamente. Se a exceção for gerada e posteriormente relançada, no mesmo método, o rastreamento de pilha conterá apenas o local em que a exceção foi gerada novamente e não incluirá o local em que a exceção foi originalmente gerada.

A StackTrace propriedade pode não relatar quantas chamadas de método forem esperadas devido a transformações de código, como inlining, que ocorrem durante a otimização.

Notas aos Herdeiros

A StackTrace propriedade é substituída em classes que exigem controle sobre o formato ou o conteúdo do rastreamento de pilha.

Por padrão, o rastreamento de pilha é capturado imediatamente antes que um objeto de exceção seja lançado. Use StackTrace para obter informações de rastreamento de pilha quando nenhuma exceção estiver sendo gerada.

Aplica-se a

Produto Versões
.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

Confira também