StackTrace Klasa

Definicja

Reprezentuje ślad stosu, który jest uporządkowaną kolekcją zawierającą co najmniej jedną ramkę stosu.

C#
public sealed class StackTrace
C#
public class StackTrace
C#
[System.Serializable]
public class StackTrace
C#
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class StackTrace
Dziedziczenie
StackTrace
Atrybuty

Przykłady

Poniższa aplikacja konsolowa pokazuje, jak utworzyć prostą StackTrace i iterować przez jej ramki w celu uzyskania informacji debugowania i diagnostyki.

C#
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

*/

Uwagi

StackTrace informacje będą najbardziej informacyjne przy użyciu konfiguracji kompilacji debugowania. Domyślnie kompilacje debugowania zawierają symbole debugowania, a kompilacje wydania nie. Symbole debugowania zawierają większość informacji o pliku, nazwie metody, numerze wiersza i kolumnie używanych w konstruowaniu StackFrame i StackTrace obiektach.

StackTrace może nie zgłaszać tyle wywołań metod zgodnie z oczekiwaniami, ponieważ przekształcenia kodu występują podczas optymalizacji.

Konstruktory

StackTrace()

Inicjuje StackTrace nowe wystąpienie klasy z ramki obiektu wywołującego.

StackTrace(Boolean)

Inicjuje StackTrace nowe wystąpienie klasy z ramki obiektu wywołującego, opcjonalnie przechwytując informacje źródłowe.

StackTrace(Exception)

Inicjuje StackTrace nowe wystąpienie klasy przy użyciu dostarczonego obiektu wyjątku.

StackTrace(Exception, Boolean)

Inicjuje StackTrace nowe wystąpienie klasy przy użyciu dostarczonego obiektu wyjątku i opcjonalnie przechwytuje informacje o źródle.

StackTrace(Exception, Int32)

Inicjuje nowe wystąpienie StackTrace klasy przy użyciu dostarczonego obiektu wyjątku i pomija określoną liczbę ramek.

StackTrace(Exception, Int32, Boolean)

Inicjuje nowe wystąpienie StackTrace klasy przy użyciu dostarczonego obiektu wyjątku, pomijając określoną liczbę ramek i opcjonalnie przechwytując informacje źródłowe.

StackTrace(IEnumerable<StackFrame>)

Tworzy ślad stosu StackFrame z zestawu obiektów.

StackTrace(Int32)

Inicjuje nowe wystąpienie StackTrace klasy z ramki obiektu wywołującego, pomijając określoną liczbę ramek.

StackTrace(Int32, Boolean)

Inicjuje nowe wystąpienie StackTrace klasy z ramki obiektu wywołującego, pomijając określoną liczbę ramek i opcjonalnie przechwytując informacje źródłowe.

StackTrace(StackFrame)

Inicjuje StackTrace nowe wystąpienie klasy, która zawiera pojedynczą ramkę.

StackTrace(Thread, Boolean)
Przestarzałe.

Inicjuje StackTrace nowe wystąpienie klasy dla określonego wątku, opcjonalnie przechwytując informacje źródłowe.

Nie należy używać tego przeciążenia konstruktora.

Pola

METHODS_TO_SKIP

Definiuje wartość domyślną dla liczby metod pomijania ze śledzenia stosu. To pole jest stałe.

Właściwości

FrameCount

Pobiera liczbę ramek w śladzie stosu.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetFrame(Int32)

Pobiera określoną ramkę stosu.

GetFrames()

Zwraca kopię wszystkich ramek stosu w bieżącym śladzie stosu.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
ToString()

Tworzy czytelną reprezentację śledzenia stosu.

Dotyczy

Produkt Wersje
.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 2.0, 2.1
UWP 10.0

Zobacz też