繁体   English   中英

防止崩溃进程发生堆栈溢出异常

[英]Prevent Stack Overflow Exception from crashing process

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

我试图在另一个应用程序域上运行Jint,这没有帮助,导致SOE上的AFAIK默认操作正在退出进程。 可以通过使用CLR托管来改变任何其他方式吗?

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

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

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

毫无疑问,在调试模式下运行意味着减慢脚本执行速度; 由你来决定检测溢出的好处是否值得惩罚 - 我肯定建议测量这个惩罚以确保它真的会成为一个问题。 一种可能的缓解方法是允许用户选择何时调试模式处于活动状态。

-标记

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM