Exception.StackTrace Özellik

Tanım

Çağrı yığınındaki anlık çerçevelerin dize gösterimini alır.

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

Özellik Değeri

Çağrı yığınının hemen çerçevelerini açıklayan bir dize. Kullanılabilir yığın izlemesi yoksa (örneğin, bir throw deyiminden yığın geri sarmadan önce), değeri olur null.

Uygulamalar

Örnekler

Aşağıdaki kod örneği bir Exception oluşturur ve ardından bunu yakalar ve özelliğini kullanarak bir yığın izlemesi StackTrace görüntüler.

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

Açıklamalar

Yürütme yığını, belirli bir anda yürütmede olan tüm yöntemleri izler. Yöntem çağrılarının izlemesi yığın izlemesi olarak adlandırılır. Yığın izleme listesi, çağrı yığınını özel durumun oluştuğu yöntemdeki satır numarasına kadar izlemenin bir yolunu sağlar.

özelliği, StackTrace özel durumun oluşturulduğu konumdan kaynaklanan çağrı yığınının çerçevelerini döndürür. Sınıfının yeni bir örneğini oluşturup yöntemini kullanarak StackTrace.ToString çağrı yığınındaki System.Diagnostics.StackTrace ek çerçeveler hakkında bilgi edinebilirsiniz.

Ortak dil çalışma zamanı (CLR), uygulama kodunda bir özel durum oluştuğunda (anahtar sözcüğünü kullanarak) yığın izlemesini throw güncelleştirir. Özel durum, başlangıçta oluşturulduğu yöntemden farklı bir yöntemde yeniden oluşturulduysa, yığın izlemesi hem yönteminde özel durumun ilk oluşturulduğu konumu hem de yönteminde özel durumun yeniden fırlatıldığı konumu içerir. Özel durum oluşturulursa ve daha sonra yeniden oluşturulursa, aynı yöntemde yığın izlemesi yalnızca özel durumun yeniden oluşturulduğu konumu içerir ve özel durumun ilk olarak oluşturulduğu konumu içermez.

özellik StackTrace , iyileştirme sırasında oluşan inlining gibi kod dönüştürmeleri nedeniyle beklendiği kadar çok yöntem çağrısı raporlamayabilir.

Devralanlara Notlar

StackTrace Özellik, yığın izleme içeriği veya biçimi üzerinde denetim gerektiren sınıflarda geçersiz kılınmış.

Varsayılan olarak, bir özel durum nesnesi oluşturmadan hemen önce yığın izlemesi yakalanır. Özel durum oluşturulurken yığın izleme bilgilerini almak için kullanın StackTrace .

Şunlara uygulanır

Ürün Sürümler
.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, 10
.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

Ayrıca bkz.