【问题标题】:Prevent Stack Overflow Exception from crashing process防止堆栈溢出异常崩溃进程
【发布时间】:2011-06-24 11:20:21
【问题描述】:

假设我有一个应用程序,用户可以在其中提供用 JavaScript 编写的脚本来执行某些任务。这是使用 Jint 完成的。但是,编写不当的脚本可能会导致 JintEngine.Run() 中的 Stack Overflow 异常,从而导致整个应用程序崩溃。我想通知用户脚本中的错误。

我尝试在另一个应用程序域上运行 Jint,但没有帮助,导致 SOE 上的 AFAIK 默认操作正在退出进程。除了使用 CLR 托管之外,是否可以通过其他方式进行更改?

我知道我可以运行单独的进程,这是我的后备方案,但我不想这样做。

【问题讨论】:

  • 我已阅读此内容,但如果可以通过使用 CLR 托管以外的任何其他方式完成此操作,则没有找到答案。

标签: c# stack-overflow applicationdomain


【解决方案1】:

正如您所怀疑的,除非您自己托管 CLR [1],否则无法捕获运行时生成的 StackOverflowException。正如 Microsoft 文档所建议的那样,最好的办法是在堆栈溢出发生之前尝试检测它。

在使用 Jint 的情况下,这意味着找到某种方法来挂钩执行引擎并将您自己的代码附加到任意方法调用。幸运的是,对他们文档的简要概述表明他们有一个调试模式可以做到这一点! [2]

毫无疑问,在调试模式下运行意味着减慢脚本执行速度;由您来决定检测溢出的好处是否值得惩罚——我绝对建议测量该惩罚以确保它确实会成为一个问题。一种可能的缓解措施是允许用户选择何时激活调试模式。

-马克

[1]http://msdn.microsoft.com/en-us/library/system.stackoverflowexception.aspx(见备注)

[2]http://jint.codeplex.com/wikipage?title=Debugging&referringTitle=Documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-27
    • 1970-01-01
    • 2020-05-24
    • 2019-07-02
    • 1970-01-01
    相关资源
    最近更新 更多