Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original

Exception::StackTrace (Propiedad)

Obtiene una representación de cadena de los marcos inmediatos en la pila de llamadas.

Espacio de nombres:  System
Ensamblado:  mscorlib (en mscorlib.dll)

public:
virtual property String^ StackTrace {
	String^ get ();
}

Valor de propiedad

Tipo: System::String
Cadena que describe los marcos inmediatos de la pila de llamadas.

Implementaciones

_Exception::StackTrace

La pila de ejecución realiza un seguimiento de todos los métodos que se encuentren en ejecución en un momento dado. El seguimiento de las llamadas a métodos se denomina seguimiento de pila. El listado del seguimiento de pila proporciona un medio para hacer un seguimiento de la pila de llamadas hasta el número de línea del método donde se ha producido la excepción.

La propiedad StackTrace devuelve los marcos de la pila de llamadas que se originan en la ubicación donde se produjo la excepción. Puede obtener información sobre los marcos adicionales en la pila de llamadas creando una nueva instancia de la clase System.Diagnostics::StackTrace y utilizando su método StackTrace::ToString.

Common Language Runtime (CLR) actualiza el seguimiento de la pila cada vez que se produce una excepción en el código de la aplicación (utilizando la palabra clave throw ). Si se produce la excepción y se vuelve a producir en un método diferente de donde se produjo la primera vez, el seguimiento de la pila solo contiene tanto la ubicación en el método donde la excepción se volvió a producir y la ubicación en el método donde se produjo originalmente. Si se produce la excepción y se vuelve a producir en el mismo método, el seguimiento de la pila solo contiene la ubicación donde la excepción se volvió a producir y no incluye la ubicación donde se produjo originalmente.

Es posible que la propiedad StackTrace no informe de todas las llamas a métodos que se esperaban porque de las transformaciones de código que pueden producirse durante la optimización, por ejemplo, la inclusión de funciones en línea.

Notas para los herederos

En las clases en las que se requiere un control del formato o del contenido del seguimiento de pila, se reemplaza la propiedad StackTrace.

De forma predeterminada, el seguimiento de pila se detecta inmediatamente antes de que se produzca un objeto Exception. Utilice Environment::StackTrace para obtener información del seguimiento de pila cuando no se produzca ninguna excepción.

En el siguiente ejemplo de código se produce un objeto Exception y, a continuación, se detecta la excepción y se muestra un seguimiento de pila mediante la propiedad StackTrace.


// Example for the Exception::HelpLink, Exception::Source,
// Exception::StackTrace, and Exception::TargetSite properties.
using namespace System;

namespace NDP_UE_CPP
{

   // Derive an exception; the constructor sets the HelpLink and 
   // Source properties.
   public ref class LogTableOverflowException: public Exception
   {
   private:
      static String^ overflowMessage = "The log table has overflowed.";

   public:
      LogTableOverflowException( String^ auxMessage, Exception^ inner )
         : Exception( String::Format( "{0} - {1}", overflowMessage, auxMessage ), inner )
      {
         this->HelpLink = "http://msdn.microsoft.com";
         this->Source = "Exception_Class_Samples";
      }

   };

   public ref class LogTable
   {
   public:
      LogTable( int numElements )
      {
         logArea = gcnew array<String^>(numElements);
         elemInUse = 0;
      }


   protected:
      array<String^>^logArea;
      int elemInUse;

   public:

      // The AddRecord method throws a derived exception if 
      // the array bounds exception is caught.
      int AddRecord( String^ newRecord )
      {
         try
         {
            logArea[ elemInUse ] = newRecord;
            return elemInUse++;
         }
         catch ( Exception^ ex ) 
         {
            throw gcnew LogTableOverflowException( String::Format( "Record \"{0}\" was not logged.", newRecord ),ex );
         }

      }

   };


   // Create a log table and force an overflow.
   void ForceOverflow()
   {
      LogTable^ log = gcnew LogTable( 4 );
      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->ToString() );
      }

   }

}

int main()
{
   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." );
   NDP_UE_CPP::ForceOverflow();
}

/*
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_CPP.LogTable.AddRecord(String newRecord)
   at NDP_UE_CPP.ForceOverflow()

TargetSite ---
Int32 AddRecord(System.String)
*/


.NET Framework

Compatible con: 4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Biblioteca de clases portable

Compatible con: Biblioteca de clases portable

.NET para aplicaciones de la Tienda Windows

Compatible con: Windows 8

.NET para aplicaciones de Windows Phone

Compatible con: Windows Phone 8, Silverlight 8.1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft