有没有办法在StackOverflowException上打印任何扩展信息?

时间:2015-09-21 12:09:54

标签: c# exception stack-overflow

我的一位客户报告我开发的软件意外终止。在应用程序日志中,唯一可用的文本是Process is terminated due to StackOverflowException.没有更多信息可以帮助我诊断和修复它。

有没有办法获取抛出异常的位置? VS在StackOverflowException上中断,但是有没有可行的方法来诊断它而不在调试器中运行应用程序(或者在包含递归的所有方法中查找它)?

1 个答案:

答案 0 :(得分:2)

在堆栈溢出后,您通常无法执行任何代码,它是罕见的无法捕获的致命异常之一,因此您不能简单地捕获它以记录任何扩展的详细信息。

解决这个问题的唯一方法是跟踪堆栈溢出代码外部的异常。您需要创建一个本机代码应用程序来托管CLR。如果这样做,您可以指定StackOverflowException不是100%致命的。这在StackOverflowException MSDN page上简要提及:

  

如果您的应用程序托管公共语言运行库(CLR),它可以指定CLR应该卸载发生堆栈溢出异常的应用程序域,并让相应的进程继续。有关详细信息,请参阅ICLRPolicyManager Interface

但即便如此,仍然意味着简单的try ... catch不足以实际捕获异常。您必须确保不会从具有堆栈溢出的应用程序域中执行异常处理。它可以从不同的应用程序域完成,也可以从非托管代码完成。