捕获StackOverflowException

con*_*tor 6 c# stack-overflow

我该怎么抓StackOverflowException

我有一个允许用户编写脚本的程序,当运行任意用户代码时,我可能会得到一个StackOverflowException.运行用户代码的部分显然是用try- 包围的catch,但是在正常情况下堆栈溢出是无法捕获的.

我环顾四周,是我能找到的最丰富的答案,但仍然让我陷入了死胡同; 从BCL团队博客中一篇文章中我发现,我应该使用RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup调用代码和代理,即使在堆栈溢出后也会调用它,但是在尝试时,进程会终止堆栈溢出消息,而代理不会被调用.我已经尝试添加PrePrepareMethodAttribute处理程序方法,但没有改变任何东西.

我也尝试使用AppDomain并处理事件UnhandledExceptionDomainUnload事件 - 但整个进程在堆栈溢出时被杀死.即使我throw new StackOverflowException();手动而没有得到实际的堆栈溢出,也会发生同样的情况.

SLa*_*aks 0

您需要在单独的进程中运行代码。