如何捕捉StackOverflowException
?捕捉一个StackOverflowException
我有一个程序,允许用户编写脚本,当运行任意用户代码时,我可能会得到StackOverflowException
。片段运行用户代码显然被一个try
- catch
包围,但在正常情况下堆栈溢出不可捕获。
我环顾四周,this是我能找到的最丰富的答案,但仍使我陷入死胡同;从article in the BCL team's blog我发现我应该使用RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup
调用即使在堆栈溢出后也会调用的代码和委托,但在尝试时,进程会因堆栈溢出消息而终止,而不会调用委托。我已经尝试在处理程序方法中添加PrePrepareMethodAttribute
,但这并没有改变任何内容。
我也尝试过使用AppDomain并处理UnhandledException
和DomainUnload
事件 - 但是整个过程在堆栈溢出时死亡。即使手动输入throw new StackOverflowException();
也不会发生实际的堆栈溢出。
你有一个程序可以使用脚本来自动化一些任意的过程,或者你的程序是一个脚本的文本编辑器?你的“任意用户代码”本身是一个脚本还是某种IL插件? – 2010-08-30 06:45:32
现在我的程序是语言的REPL(read-eval-print loop)。 – configurator 2010-08-31 10:38:15