C# 如何记录StackOverflowException的stacktrace?

C# 如何记录StackOverflowException的stacktrace?,c#,exception,exception-handling,stack-overflow,C#,Exception,Exception Handling,Stack Overflow,我已经阅读了关于处理StackOverflowException的类似问题的答案,我理解从.NET2.0开始,StackOverflowException终止进程,我对此没有意见 但是,当堆栈溢出发生时,我想知道它发生的原因,特别是我想记录stacktrace 在中,声明如果您为方法设置了适当的属性,则可以处理stackoverflow异常: 从.NET Framework 4开始,不会为引发此事件 损坏进程状态的异常,例如堆栈 溢出或访问冲突,除非事件处理程序 安全性至关重要,并且具有 Han

我已经阅读了关于处理StackOverflowException的类似问题的答案,我理解从.NET2.0开始,StackOverflowException终止进程,我对此没有意见

但是,当堆栈溢出发生时,我想知道它发生的原因,特别是我想记录stacktrace

在中,声明如果您为方法设置了适当的属性,则可以处理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);
    }
}
程序仍然在没有给我stacktrace的情况下终止


如何为StackOverflowException录制stacktrace?

您可以尝试不在visual studio中运行它吗。构建一个发布版本,从VisualStudio外部启动它,看看是否得到相同的结果。当它在VS内部运行时,它会在Stackoverlfowexception上中断。当它没有在vs中运行时,它只是崩溃而没有留下任何痕迹