gpt4 book ai didi

c# - 防止堆栈溢出异常导致进程崩溃

转载 作者:太空狗 更新时间:2023-10-29 23:03:22 25 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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

-标记

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

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

关于c# - 防止堆栈溢出异常导致进程崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com