本文為機器翻譯文章。如需檢視英文版,請選取 [原文] 核取方塊。您也可以將滑鼠指標移到文字上,即可在快顯視窗顯示英文原文。
譯文
原文

Exception.StackTrace 屬性

 

取得呼叫堆疊上即時運算框架的字串表示。

命名空間:   System
組件:  mscorlib (於 mscorlib.dll)

public virtual string StackTrace { get; }

屬性值

Type: System.String

字串,描述呼叫堆疊的立即框架。

執行堆疊會持續追蹤指定的執行個體的所有執行中方法。 方法呼叫的追蹤稱為堆疊追蹤。 堆疊追蹤清單可遵循的行號,在方法中發生例外狀況呼叫堆疊。

StackTrace 屬性傳回的呼叫堆疊框架源自於擲回例外狀況所在的位置。 您可以藉由建立的新執行個體取得呼叫堆疊中的其他框架的相關資訊System.Diagnostics.StackTrace類別,並使用其StackTrace.ToString方法。

每當應用程式程式碼中擲回例外狀況時,common language runtime (CLR) 會更新堆疊追蹤 (使用throw關鍵字)。 如果是不同方法較它原先擲回所在的方法中重新擲回例外狀況,方法中的位置,原先擲回例外狀況,以及在方法中,重新擲回例外狀況的位置,也會包含堆疊追蹤。 如果例外狀況會擲回,並稍後重新擲回,在相同方法中,堆疊追蹤只會包含重新擲回例外狀況和不包含其中原先擲回例外狀況的位置的位置。

StackTrace 屬性可能不會報告許多預期方法呼叫轉換之程式碼,因為這類內嵌 (inline),發生在最佳化期間。

繼承者注意事項︰

StackTrace在需要控制堆疊追蹤內容或格式的類別中覆寫屬性。

根據預設,堆疊追蹤會擷取之前擲回例外狀況物件。 使用Environment.StackTrace時不擲回任何例外狀況取得的堆疊追蹤資訊。

下列程式碼範例會擲回Exception然後攔截它,並顯示堆疊追蹤使用StackTrace屬性。

// 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 = "http://msdn.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 ---
http://msdn.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)
*/

通用 Windows 平台
自 8 起供應
.NET Framework
自 1.1 起供應
可攜式類別庫
提供支援︰ 可攜式 .NET 平台
Silverlight
自 2.0 起供應
Windows Phone Silverlight
自 7.0 起供應
Windows Phone
自 8.1 起供應
回到頁首
顯示: