Exception.StackTrace Property
Assembly: mscorlib (in mscorlib.dll)
The execution stack keeps track of all the methods that are in execution at a given instant. A trace of the method calls is called a stack trace. The stack trace listing provides a means to follow the call sequence to the line number in the method where the exception occurs.
StackTrace may not report as many method calls as expected, due to code transformations, such as inlining, that occur during optimization.
Notes to Inheritors: The StackTrace property is overridden in classes that require control over the stack trace content or format. By default, the stack trace is captured immediately before an exception object is thrown. Use Environment.StackTrace to get stack trace information when no exception is being thrown.The following code example throws an Exception and then catches it and displays a stack trace using the StackTrace property.
// 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) */
// Example for the Exception.HelpLink, Exception.Source,
// Exception.StackTrace, and Exception.TargetSite properties.
package NDP_UE_JSL;
import System.* ;
// Derive an exception; the constructor sets the HelpLink and
// Source properties.
class LogTableOverflowException extends System.Exception
{
private String overflowMessage = "The log table has overflowed.";
public LogTableOverflowException(System.String auxMessage,
System.Exception inner)
{
super(String.Format("The log table has overflowed. - {0}",
auxMessage), inner);
this.set_HelpLink("http://msdn.microsoft.com");
this.set_Source("Exception_Class_Samples");
} //LogTableOverflowException
} //LogTableOverflowException
class LogTable
{
public LogTable(int numElements)
{
logArea = new String[numElements];
elemInUse = 0;
} //LogTable
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) throws LogTableOverflowException
{
try {
logArea.set_Item(elemInUse, newRecord);
return elemInUse++;
}
catch (System.Exception e) {
throw new LogTableOverflowException(
String.Format("Record \"{0}\" was not logged.", newRecord), e);
}
} //AddRecord
} //LogTable
class OverflowDemo
{
// Create a log table and force an overflow.
public static void main(String[] args)
{
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}",
System.Convert.ToString(count)));
}
}
catch (System.Exception ex) {
Console.WriteLine("\nMessage ---\n{0}", ex.get_Message());
Console.WriteLine("\nHelpLink ---\n{0}", ex.get_HelpLink());
Console.WriteLine("\nSource ---\n{0}", ex.get_Source());
Console.WriteLine("\nStackTrace ---\n{0}", ex.get_StackTrace());
Console.WriteLine("\nTargetSite ---\n{0}", ex.get_TargetSite());
}
} //main
} //OverflowDemo
/*
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_JSL.LogTable.AddRecord(String newRecord) in D:\Test\ConsoleApplicat
ion7\ConsoleApplication7\Class1.jsl:line 45
at NDP_UE_JSL.OverflowDemo.main(String[] args) in D:\Test\ConsoleApplication7
\ConsoleApplication7\Class1.jsl:line 62
TargetSite ---
Int32 AddRecord(System.String)
*/
Windows 98, Windows Server 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile for Pocket PC, Windows Mobile for Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
The Microsoft .NET Framework 3.0 is supported on Windows Vista, Microsoft Windows XP SP2, and Windows Server 2003 SP1.