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

StackFrame (Clase)

Proporciona información sobre StackFrame, que representa una llamada a una función en la pila de llamadas del subproceso actual.

System::Object
  System.Diagnostics::StackFrame

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

[SerializableAttribute]
[ComVisibleAttribute(true)]
[SecurityPermissionAttribute(SecurityAction::InheritanceDemand, UnmanagedCode = true)]
public ref class StackFrame

El tipo StackFrame expone los siguientes miembros.

  NombreDescripción
Método públicoStackFrame()Inicializa una nueva instancia de la clase StackFrame.
Método públicoStackFrame(Boolean)Inicializa una nueva instancia de la clase StackFrame y, opcionalmente, captura información de origen.
Método públicoStackFrame(Int32)Inicializa una nueva instancia de la clase StackFrame correspondiente a un marco situado por encima del marco de pila actual.
Método públicoStackFrame(Int32, Boolean)Inicializa una nueva instancia de la clase StackFrame correspondiente a un marco situado por encima del marco de pila actual y, opcionalmente, captura información de origen.
Método públicoStackFrame(String, Int32)Inicializa una nueva instancia de la clase StackFrame que sólo contiene el nombre de archivo y el número de línea especificados.
Método públicoStackFrame(String, Int32, Int32)Inicializa una nueva instancia de la clase StackFrame que sólo contiene el nombre de archivo y el número de línea y columna especificados.
Arriba

  NombreDescripción
Método públicoEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método protegidoFinalize Permite que un objeto intente liberar recursos y realizar otras operaciones de limpieza antes de ser reclamado por la recolección de elementos no utilizados. (Se hereda de Object).
Método públicoGetFileColumnNumberObtiene el número de columna del archivo que contiene el código que se está ejecutando. Esta información se extrae normalmente de los símbolos de depuración del ejecutable.
Método públicoGetFileLineNumberObtiene el número de línea del archivo que contiene el código que se está ejecutando. Esta información se extrae normalmente de los símbolos de depuración del ejecutable.
Método públicoGetFileNameObtiene el nombre de archivo que contiene el código que se está ejecutando. Esta información se extrae normalmente de los símbolos de depuración del ejecutable.
Método públicoGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetILOffsetObtiene la posición de desplazamiento desde el inicio del código del Lenguaje intermedio de Microsoft (MSIL) del método que se está ejecutando. Este desplazamiento puede ser aproximado dependiendo de si el compilador Just-In-Time (JIT) está generando código de depuración o no. La generación de esta información de depuración se controla mediante DebuggableAttribute.
Método públicoGetMethodObtiene el método en el que se está ejecutando el marco.
Método públicoGetNativeOffsetObtiene el desplazamiento desde el inicio del código nativo Just-In-Time (JIT) del método que se está ejecutando. La generación de esta información de depuración se controla mediante la clase DebuggableAttribute.
Método públicoGetType Obtiene el Type de la instancia actual. (Se hereda de Object).
Método protegidoMemberwiseClone Crea una copia superficial del Object actual. (Se hereda de Object).
Método públicoToStringCompila una representación legible del seguimiento de pila. (Invalida a Object::ToString()).
Arriba

  NombreDescripción
Campo públicoMiembro estáticoOFFSET_UNKNOWNDefine el valor devuelto por el método GetNativeOffset o GetILOffset cuando se desconoce la posición de desplazamiento nativo o del Lenguaje intermedio de Microsoft (MSIL). Este campo es constante.
Arriba

StackFrame se crea y se inserta en la pila de llamadas de todas las llamadas a funciones realizadas durante la ejecución de un subproceso. El marco de pila siempre incluye información sobre MethodBase y también puede incluir información sobre el nombre de archivo, el número de línea y el número de columna.

La información de StackFrame será más descriptiva con configuraciones de versiones de depuración. Las versiones de depuración incluyen símbolos de depuración de forma predeterminada; sin embargo, las versiones de lanzamiento no incluyen estos símbolos. Los símbolos de depuración contienen la mayor parte de la información de archivo, nombre de método, número de línea y columna que se utiliza para construir objetos StackFrame.

En el siguiente ejemplo se muestra el uso de la clase StackFrame para proporcionar la información del marco de pila para realizar un seguimiento de la pila.

No hay ningún ejemplo de código disponible o este idioma no es compatible.

En el ejemplo siguiente se muestra el uso de los miembros de la clase StackFrame.


#using <System.dll>

using namespace System;
using namespace System::Diagnostics;

// This console application illustrates various uses
// of the StackTrace and StackFrame classes.
namespace SampleInternal
{
   public ref class ClassLevel6
   {
   public:
      void Level6Method()
      {
         throw gcnew Exception( "An error occurred in the lowest internal class method." );
      }

   };

   public ref class ClassLevel5
   {
   public:

      void Level5Method()
      {
         try
         {
            ClassLevel6^ nestedClass = gcnew ClassLevel6;
            nestedClass->Level6Method();
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( " Level5Method exception handler" );
            StackTrace^ st = gcnew StackTrace;

            // Display the most recent function call.
            StackFrame^ sf = st->GetFrame( 0 );
            Console::WriteLine();
            Console::WriteLine( "  Exception in method: " );
            Console::WriteLine( "      {0}", sf->GetMethod() );
            if ( st->FrameCount > 1 )
            {

               // Display the highest-level function call
               // in the trace.
               sf = st->GetFrame( st->FrameCount - 1 );
               Console::WriteLine( "  Original function call at top of call stack):" );
               Console::WriteLine( "      {0}", sf->GetMethod() );
            }
            Console::WriteLine();
            Console::WriteLine( "   ... throwing exception to next level ..." );
            Console::WriteLine( "-------------------------------------------------\n" );
            throw e;
         }

      }

   };

   public ref class ClassLevel4
   {
   public:
      void Level4Method()
      {

         try
         {
            ClassLevel5^ nestedClass = gcnew ClassLevel5;
            nestedClass->Level5Method();
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( " Level4Method exception handler" );

            // Build a stack trace from a dummy stack frame.
            // Explicitly specify the source file name, line number
            // and column number.
            StackTrace^ st = gcnew StackTrace( gcnew StackFrame( "source.cs",79,24 ) );
            Console::WriteLine( " Stack trace with dummy stack frame: {0}", st->ToString() );

            // Access the StackFrames explicitly to display the file
            // name, line number and column number properties.
            // StackTrace.ToString only includes the method name. 
            for ( int i = 0; i < st->FrameCount; i++ )
            {
               StackFrame^ sf = st->GetFrame( i );
               Console::WriteLine( " File: {0}", sf->GetFileName() );
               Console::WriteLine( " Line Number: {0}", sf->GetFileLineNumber().ToString() );
               Console::WriteLine( " Column Number: {0}", sf->GetFileColumnNumber().ToString() );

            }
            Console::WriteLine();
            Console::WriteLine( "   ... throwing exception to next level ..." );
            Console::WriteLine( "-------------------------------------------------\n" );
            throw e;
         }


      }

   };

   public ref class ClassLevel3
   {
   public:

      void Level3Method()
      {
         try
         {
            ClassLevel4^ nestedClass = gcnew ClassLevel4;
            nestedClass->Level4Method();
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( " Level3Method exception handler" );

            // Build a stack trace from a dummy stack frame.
            // Explicitly specify the source file name and line number.
            StackTrace^ st = gcnew StackTrace( gcnew StackFrame( "source.cs",60 ) );
            Console::WriteLine( " Stack trace with dummy stack frame: {0}", st->ToString() );
            for ( int i = 0; i < st->FrameCount; i++ )
            {

               // Display the stack frame properties.
               StackFrame^ sf = st->GetFrame( i );
               Console::WriteLine( " File: {0}", sf->GetFileName() );
               Console::WriteLine( " Line Number: {0}", sf->GetFileLineNumber().ToString() );

               // Note that the column number defaults to zero
               // when not initialized.
               Console::WriteLine( " Column Number: {0}", sf->GetFileColumnNumber().ToString() );
               Console::WriteLine( " Intermediate Language Offset: {0}", sf->GetILOffset().ToString() );
               Console::WriteLine( " Native Offset: {0}", sf->GetNativeOffset().ToString() );


            }
            Console::WriteLine();
            Console::WriteLine( "   ... throwing exception to next level ..." );
            Console::WriteLine( "-------------------------------------------------\n" );
            throw e;
         }

      }

   };

   public ref class ClassLevel2
   {
   public:

      void Level2Method()
      {
         try
         {
            ClassLevel3^ nestedClass = gcnew ClassLevel3;
            nestedClass->Level3Method();
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( " Level2Method exception handler" );

            // Display the full call stack at this level.
            StackTrace^ st1 = gcnew StackTrace( true );
            Console::WriteLine( " Stack trace for this level: {0}", st1->ToString() );

            // Build a stack trace from one frame, skipping the
            // current frame and using the next frame.
            StackTrace^ st2 = gcnew StackTrace( gcnew StackFrame( 1,true ) );
            Console::WriteLine( " Stack trace built with next level frame: {0}", st2->ToString() );

            // Build a stack trace skipping the current frame, and
            // including all the other frames.
            StackTrace^ st3 = gcnew StackTrace( 1,true );
            Console::WriteLine( " Stack trace built from the next level up: {0}", st3->ToString() );
            Console::WriteLine();
            Console::WriteLine( "   ... throwing exception to next level ..." );
            Console::WriteLine( "-------------------------------------------------\n" );
            throw e;
         }

      }

   };

   public ref class ClassLevel1
   {
   public:

      void InternalMethod()
      {
         try
         {
            ClassLevel2^ nestedClass = gcnew ClassLevel2;
            nestedClass->Level2Method();
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( " InternalMethod exception handler" );

            // Build a stack trace from one frame, skipping the
            // current frame and using the next frame.  By
            // default, file and line information are not displayed.
            StackTrace^ st = gcnew StackTrace( gcnew StackFrame( 1 ) );
            Console::WriteLine( " Stack trace for next level frame: {0}", st->ToString() );
            Console::WriteLine( " Stack frame for next level: " );
            Console::WriteLine( "   {0}", st->GetFrame( 0 )->ToString() );
            Console::WriteLine( " Line Number: {0}", st->GetFrame( 0 )->GetFileLineNumber().ToString() );
            Console::WriteLine();
            Console::WriteLine( "   ... throwing exception to next level ..." );
            Console::WriteLine( "-------------------------------------------------\n" );
            throw e;
         }

      }

   };

}


using namespace SampleInternal;

namespace SamplePublic
{
   class ConsoleApp
   {
   public:


      [STAThread]
      static void Main()
      {
         ClassLevel1 ^ mainClass = gcnew ClassLevel1;
         try
         {
            mainClass->InternalMethod();
         }
         catch ( Exception^ e ) 
         {
            Console::WriteLine( " Main method exception handler" );

            // Display file and line information, if available.
            StackTrace^ st = gcnew StackTrace( gcnew StackFrame( true ) );
            Console::WriteLine( " Stack trace for current level: {0}", st->ToString() );
            Console::WriteLine( " File: {0}", st->GetFrame( 0 )->GetFileName() );
            Console::WriteLine( " Line Number: {0}", st->GetFrame( 0 )->GetFileLineNumber().ToString() );
            Console::WriteLine();
            Console::WriteLine( "-------------------------------------------------\n" );
         }

      }

   };

}

int main()
{
   SamplePublic::ConsoleApp::Main();
}



.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

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

Todos los miembros static (Shared en Visual Basic) públicos de este tipo son seguros para la ejecución de subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft