我已经阅读了有关处理StackOverflowException的类似问题的答案,我理解从.net 2.0开始,StackOverflowException终止了这个过程,我对此很好。
然而,当堆栈溢出发生时,我想知道它为什么会发生,特别是我想记录堆栈跟踪。
在Microsoft documentation中,它声明如果为方法设置了适当的属性,则可以处理stackoverflow异常:
从.NET Framework 4开始,不会引发此事件 破坏进程状态的异常,例如堆栈 溢出或访问冲突,除非事件处理程序是 安全关键,并有 HandleProcessCorruptedStateExceptionsAttribute属性。
所以我尝试将HandleProcessCorruptedStateExceptionsAttribute
设置为我的处理程序方法:
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
Main(null);
}
[SecurityCritical]
[HandleProcessCorruptedStateExceptionsAttribute]
private static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
{
Console.WriteLine(e.ExceptionObject);
}
}
程序仍然在没有给我堆栈跟踪的情况下终止。
如何为StackOverflowException记录堆栈跟踪?