StackTrace StackTrace StackTrace StackTrace Class

Définition

Représente une trace de la pile, à savoir une collection ordonnée de frames de pile.Represents a stack trace, which is an ordered collection of one or more stack frames.

public ref class StackTrace
[System.Runtime.InteropServices.ComVisible(true)]
[System.Serializable]
public class StackTrace
type StackTrace = class
Public Class StackTrace
Héritage
StackTraceStackTraceStackTraceStackTrace
Attributs

Exemples

L’application console suivante montre comment créer une simple StackTrace et itérer au sein de ses frames pour obtenir des informations de débogage et de diagnostic.The following console application demonstrates how to create a simple StackTrace and iterate through its frames to obtain debugging and diagnostic information.

#using <System.dll>

using namespace System;
using namespace System::Diagnostics;
ref class StackTraceSample
{
private:
   ref class MyInternalClass
   {
   public:
      void ThrowsException()
      {
         try
         {
            throw gcnew Exception( "A problem was encountered." );
         }
         catch ( Exception^ e ) 
         {
            
            // Create a StackTrace that captures
            // filename, line number, and column
            // information for the current thread.
            StackTrace^ st = gcnew StackTrace( true );
            String^ stackIndent = "";
            for ( int i = 0; i < st->FrameCount; i++ )
            {
               
               // Note that at this level, there are five
               // stack frames, one for each method invocation.
               StackFrame^ sf = st->GetFrame( i );
               Console::WriteLine();
               Console::WriteLine( "{0}Method: {1}", stackIndent, sf->GetMethod() );
               Console::WriteLine( "{0}File: {1}", stackIndent, sf->GetFileName() );
               Console::WriteLine( "{0}Line Number: {1}", stackIndent, sf->GetFileLineNumber().ToString() );
               stackIndent = String::Concat( stackIndent, "  " );

            }
            throw e;
         }

      }

   };


protected:
   void MyProtectedMethod()
   {
      MyInternalClass^ mic = gcnew MyInternalClass;
      mic->ThrowsException();
   }


public:
   void MyPublicMethod()
   {
      MyProtectedMethod();
   }

};

int main()
{
   StackTraceSample^ sample = gcnew StackTraceSample;
   try
   {
      sample->MyPublicMethod();
   }
   catch ( Exception^ ) 
   {
      
      // Create a StackTrace that captures
      // filename, line number, and column
      // information for the current thread.
      StackTrace^ st = gcnew StackTrace( true );
      for ( int i = 0; i < st->FrameCount; i++ )
      {
         
         // For an executable built from C++, there
         // are two stack frames here: one for main,
         // and one for the _mainCRTStartup stub. 
         StackFrame^ sf = st->GetFrame( i );
         Console::WriteLine();
         Console::WriteLine( "High up the call stack, Method: {0}", sf->GetMethod()->ToString() );
         Console::WriteLine( "High up the call stack, Line Number: {0}", sf->GetFileLineNumber().ToString() );

      }
   }

}

/*
This console application produces the following output when
compiled with the Debug configuration.

  Method: Void ThrowsException()
  File: c:\samples\stacktraceframe\myclass.cpp
  Line Number: 20

    Method: Void MyProtectedMethod()
    File: c:\samples\stacktraceframe\myclass.cpp
    Line Number: 45

      Method: Void MyPublicMethod()
      File: c:\samples\stacktraceframe\myclass.cpp
      Line Number: 50
 
        Method: Int32 main()
        File: c:\samples\stacktraceframe\myclass.cpp
        Line Number: 56

          Method: UInt32 _mainCRTStartup()
          File:
          Line Number: 0

  High up the call stack, Method: Int32 main()
  High up the call stack, Line Number: 62

  High up the call stack, Method: UInt32 _mainCRTStartup()
  High up the call stack, Line Number: 0

This console application produces the following output when
compiled with the Release configuration.

  Method: Void ThrowsException()
  File:
  Line Number: 0

    Method: Int32 main()
    File:
    Line Number: 0

      Method: UInt32 _mainCRTStartup()
      File:
      Line Number: 0

  High up the call stack, Method: Int32 main()
  High up the call stack, Line Number: 0

  High up the call stack, Method: UInt32 _mainCRTStartup()
  High up the call stack, Line Number: 0

*/
using System;
using System.Diagnostics;

class StackTraceSample
{
    [STAThread]
    static void Main(string[] args)
    {
        StackTraceSample sample = new StackTraceSample();
        try
        {
            sample.MyPublicMethod();
        }
        catch (Exception)
        {
            // Create a StackTrace that captures
            // filename, line number, and column
            // information for the current thread.
            StackTrace st = new StackTrace(true);
            for(int i =0; i< st.FrameCount; i++ )
            {
                // Note that high up the call stack, there is only
                // one stack frame.
                StackFrame sf = st.GetFrame(i);
                Console.WriteLine();
                Console.WriteLine("High up the call stack, Method: {0}",
                    sf.GetMethod());

                Console.WriteLine("High up the call stack, Line Number: {0}",
                    sf.GetFileLineNumber());
            }
        }
    }

    public void MyPublicMethod () 
    { 
        MyProtectedMethod(); 
    }

    protected void MyProtectedMethod ()
    {
        MyInternalClass mic = new MyInternalClass();
        mic.ThrowsException();
    }

    class MyInternalClass
    {
        public void ThrowsException()
        {
            try
            {
                throw new Exception("A problem was encountered.");
            }
            catch (Exception e)
            {
                // Create a StackTrace that captures filename,
                // line number and column information.
                StackTrace st = new StackTrace(true);
                string stackIndent = "";
                for(int i =0; i< st.FrameCount; i++ )
                {
                    // Note that at this level, there are four
                    // stack frames, one for each method invocation.
                    StackFrame sf = st.GetFrame(i);
                    Console.WriteLine();
                    Console.WriteLine(stackIndent + " Method: {0}",
                        sf.GetMethod() );
                    Console.WriteLine(  stackIndent + " File: {0}", 
                        sf.GetFileName());
                    Console.WriteLine(  stackIndent + " Line Number: {0}",
                        sf.GetFileLineNumber());
                    stackIndent += "  ";
                }
                throw e;
            }
        }
    }
}

/*
This console application produces the following output when
compiled with the Debug configuration.
  
   Method: Void ThrowsException()
   File: c:\samples\stacktraceframe\myclass.cs
   Line Number: 59

     Method: Void MyProtectedMethod()
     File: c:\samples\stacktraceframe\myclass.cs
     Line Number: 45

       Method: Void MyPublicMethod()
       File: c:\samples\stacktraceframe\myclass.cs
       Line Number: 39

         Method: Void Main(System.String[])
         File: c:\samples\stacktraceframe\myclass.cs
         Line Number: 13

  High up the call stack, Method: Void Main(System.String[])
  High up the call stack, Line Number: 20


This console application produces the following output when
compiled with the Release configuration.

   Method: Void ThrowsException()
   File:
   Line Number: 0

     Method: Void Main(System.String[])
     File:
     Line Number: 0

  High up the call stack, Method: Void Main(System.String[])
  High up the call stack, Line Number: 0

*/
Imports System.Diagnostics

Class StackTraceSample
   
    <STAThread()>  _
    Public Shared Sub Main()

        Dim sample As New StackTraceSample()
        Try
   
            sample.MyPublicMethod()
        Catch
            ' Create a StackTrace that captures
            ' filename, line number, and column
            ' information for the current thread.
            Dim st As New StackTrace(True)
            Dim i As Integer

            For i = 0 To st.FrameCount - 1

                ' Note that high up the call stack, there is only
                ' one stack frame.
                Dim sf As StackFrame = st.GetFrame(i)
                Console.WriteLine()
                Console.WriteLine("High up the call stack, Method: {0}", _
                    sf.GetMethod())
            
                Console.WriteLine("High up the call stack, Line Number: {0}", _
                    sf.GetFileLineNumber())
            Next i
        End Try
    End Sub
   
   Public Sub MyPublicMethod()
      MyProtectedMethod()
   End Sub
    
   Protected Sub MyProtectedMethod()
      Dim mic As New MyInternalClass()
      mic.ThrowsException()
   End Sub
   
   
   Class MyInternalClass
      
      Public Sub ThrowsException()
         Try
            Throw New Exception("A problem was encountered.")
         Catch e As Exception

            ' Create a StackTrace that captures filename,
            ' line number and column information.
            Dim st As New StackTrace(True)

            Dim stackIndent As String = ""
            Dim i As Integer
            For i = 0 To st.FrameCount - 1
               ' Note that at this level, there are four
               ' stack frames, one for each method invocation.
               Dim sf As StackFrame = st.GetFrame(i)
               Console.WriteLine()
               Console.WriteLine(stackIndent + " Method: {0}", _
                   sf.GetMethod())
               Console.WriteLine(stackIndent + " File: {0}", _
                   sf.GetFileName())
               Console.WriteLine(stackIndent + " Line Number: {0}", _
                   sf.GetFileLineNumber())
               stackIndent += "  "
            Next i
            Throw e
         End Try
      End Sub
   End Class
End Class


' This console application produces the following output when
' compiled with the Debug configuration.
'   
'    Method: Void ThrowsException()
'    File: c:\pp\samples\stacktraceframe\myclass.vb
'    Line Number: 55
' 
'      Method: Void MyProtectedMethod()
'      File: c:\pp\samples\stacktraceframe\myclass.vb
'      Line Number: 42
' 
'        Method: Void MyPublicMethod()
'        File: c:\pp\samples\stacktraceframe\myclass.vb
'        Line Number: 37
' 
'          Method: Void Main(System.String[])
'          File: c:\pp\samples\stacktraceframe\myclass.vb
'          Line Number: 13
' 
'   High up the call stack, Method: Void Main(System.String[])
'   High up the call stack, Line Number: 18
' 
' 
' This console application produces the following output when
' compiled with the Release configuration.
' 
'    Method: Void ThrowsException()
'    File:
'    Line Number: 0
' 
'      Method: Void Main(System.String[])
'      File:
'      Line Number: 0
' 
'   High up the call stack, Method: Void Main()
'   High up the call stack, Line Number: 0
'

Remarques

StackTraceles informations seront très utiles avec les configurations de build de débogage.StackTrace information will be most informative with Debug build configurations. Par défaut, les versions Debug incluent des symboles de débogage, contrairement aux versions release.By default, Debug builds include debug symbols, while Release builds do not. Les symboles de débogage contiennent la plupart du fichier, le nom de la méthode, le numéro de ligne et StackFrame les StackTrace informations de colonne utilisés dans la construction des objets et.The debug symbols contain most of the file, method name, line number, and column information used in constructing StackFrame and StackTrace objects.

StackTracepeut ne pas signaler autant d’appels de méthode que prévu, en raison des transformations de code qui se produisent pendant l’optimisation.StackTrace might not report as many method calls as expected, due to code transformations that occur during optimization.

Constructeurs

StackTrace() StackTrace() StackTrace() StackTrace()

Initialise une nouvelle instance de la classe StackTrace à partir du frame d'un appelant.Initializes a new instance of the StackTrace class from the caller's frame.

StackTrace(Boolean) StackTrace(Boolean) StackTrace(Boolean) StackTrace(Boolean)

Initialise une nouvelle instance de la classe StackTrace à partir du frame d'un appelant, en capturant éventuellement les informations sur la source.Initializes a new instance of the StackTrace class from the caller's frame, optionally capturing source information.

StackTrace(Exception) StackTrace(Exception) StackTrace(Exception) StackTrace(Exception)

Initialise une nouvelle instance de la classe StackTrace, à l'aide de l'objet exception fourni.Initializes a new instance of the StackTrace class using the provided exception object.

StackTrace(Exception, Boolean) StackTrace(Exception, Boolean) StackTrace(Exception, Boolean) StackTrace(Exception, Boolean)

Initialise une nouvelle instance de la classe StackTrace à l'aide de l'objet exception fourni, en capturant éventuellement les informations sur la source.Initializes a new instance of the StackTrace class, using the provided exception object and optionally capturing source information.

StackTrace(Exception, Int32) StackTrace(Exception, Int32) StackTrace(Exception, Int32) StackTrace(Exception, Int32)

Initialise une nouvelle instance de la classe StackTrace à l'aide de l'objet exception fourni et en ignorant le nombre spécifié de frames.Initializes a new instance of the StackTrace class using the provided exception object and skipping the specified number of frames.

StackTrace(Exception, Int32, Boolean) StackTrace(Exception, Int32, Boolean) StackTrace(Exception, Int32, Boolean) StackTrace(Exception, Int32, Boolean)

Initialise une nouvelle instance de la classe StackTrace, à l'aide de l'objet exception fourni, en ignorant le nombre spécifié de frames et en capturant éventuellement les informations sur la source.Initializes a new instance of the StackTrace class using the provided exception object, skipping the specified number of frames and optionally capturing source information.

StackTrace(Int32) StackTrace(Int32) StackTrace(Int32) StackTrace(Int32)

Initialise une nouvelle instance de la classe StackTrace, à partir du frame d'un appelant, en ignorant le nombre spécifié de frames.Initializes a new instance of the StackTrace class from the caller's frame, skipping the specified number of frames.

StackTrace(Int32, Boolean) StackTrace(Int32, Boolean) StackTrace(Int32, Boolean) StackTrace(Int32, Boolean)

Initialise une nouvelle instance de la classe StackTrace à partir du frame d'un appelant, en ignorant le nombre spécifié de frames et en capturant éventuellement les informations sur la source.Initializes a new instance of the StackTrace class from the caller's frame, skipping the specified number of frames and optionally capturing source information.

StackTrace(StackFrame) StackTrace(StackFrame) StackTrace(StackFrame) StackTrace(StackFrame)

Initialise une nouvelle instance de la classe StackTrace qui contient un frame unique.Initializes a new instance of the StackTrace class that contains a single frame.

StackTrace(Thread, Boolean) StackTrace(Thread, Boolean) StackTrace(Thread, Boolean) StackTrace(Thread, Boolean)

Initialise une nouvelle instance de la classe StackTrace pour un thread spécifique, en capturant éventuellement les informations sur la source.Initializes a new instance of the StackTrace class for a specific thread, optionally capturing source information.

N'utilisez pas cette surcharge de constructeur.Do not use this constructor overload.

Champs

METHODS_TO_SKIP METHODS_TO_SKIP METHODS_TO_SKIP METHODS_TO_SKIP

Définit la valeur par défaut pour le nombre de méthodes à omettre dans la trace de la pile.Defines the default for the number of methods to omit from the stack trace. Ce champ est constant.This field is constant.

Propriétés

FrameCount FrameCount FrameCount FrameCount

Obtient le nombre de frames dans la trace de la pile.Gets the number of frames in the stack trace.

Méthodes

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetFrame(Int32) GetFrame(Int32) GetFrame(Int32) GetFrame(Int32)

Obtient le frame de pile spécifié.Gets the specified stack frame.

GetFrames() GetFrames() GetFrames() GetFrames()

Retourne une copie de tous les frames de pile dans la trace de la pile actuelle.Returns a copy of all stack frames in the current stack trace.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fait office de fonction de hachage par défaut.Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Génère une représentation lisible de la trace de la pile.Builds a readable representation of the stack trace.

Sécurité

InheritanceDemand
pour permettre aux héritiers d’accéder au code non managé.for the ability of inheritors to access unmanaged code. Énumération associée : UnmanagedCode.Associated enumeration: UnmanagedCode. Cette classe ne peut pas être héritée par du code de confiance partielle.This class cannot be inherited by partially trusted code.

S’applique à

Voir aussi