我从MSDN读到:
StackTrace属性返回调用堆栈的帧,该调用堆栈的帧源自抛出异常的位置
这句话对我来说并不清楚,所以让我们看看例子:
class Program
{
static void Main(string[] args)
{
try
{
A();
}
catch (Exception e)
{
Console.WriteLine("second catch. Stacktrace: {0}", e.StackTrace);
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
public static void A()
{
try
{
throw new Exception();
}
catch (Exception e)
{
Console.WriteLine("first catch. Stacktrace: {0}", e.StackTrace);
throw;
}
}
}
输出:(隐藏'在'块')
first catch. Stacktrace:
at TestExceptions.Program.A()
second catch. Stacktrace:
at TestExceptions.Program.A()
at TestExceptions.Program.Main(String[] args)
第一个catch块中的Exception.StackTrace不包含完整的堆栈跟踪,包括“Main”方法调用。 更一般地说,Exception.StackTrace只包含捕获块和抛出位置之间的堆栈帧。
有谁知道,为什么选择这样的决定?由于性能问题,还是存在其他一些问题?
更新
问题与that question不同。我想知道为什么选择exception.StackTrace会返回堆栈的部分。