本文由机器翻译。若要查看英语原文,请勾选“英语”复选框。 也可将鼠标指针移到文本上,在弹出窗口中显示英语原文。
翻译
英语

Exception.StackTrace 属性

 

获取调用堆栈上的即时框架字符串表示形式。

命名空间:   System
程序集:  mscorlib(位于 mscorlib.dll)

public virtual string StackTrace { get; }

属性值

Type: System.String

用于描述调用堆栈的直接帧的字符串。

执行堆栈将跟踪在给定时刻正在执行的所有方法。 对方法调用的跟踪称为堆栈跟踪。 堆栈跟踪列表提供了一种方法为跟踪调用堆栈中方法的行号出现异常。

StackTrace 属性返回源自引发异常的位置的调用堆栈帧。 可以通过创建的新实例中获取有关调用堆栈中的其他帧的信息System.Diagnostics.StackTrace类并使用其StackTrace.ToString方法。

每当应用程序代码中引发异常时,公共语言运行时 (CLR) 将更新的堆栈跟踪 (通过使用throw关键字)。 如果已将不同于该方法最初抛方法中重新引发异常,堆栈跟踪包含的方法中的位置,其中原来引发异常,并重新引发该异常的方法中的位置。 如果引发,并稍后重新引发,在同一方法中,异常的堆栈跟踪将仅包含的位置重新引发异常并不包括最初引发异常的位置。

StackTrace 属性可能不报告的由于代码转换,如预期的任意多个方法调用内联,在优化过程中发生。

继承函数说明:

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 起可用
返回页首
显示: