1

我正在使用 google 的 v8 javascript 引擎在我的项目中拥有一个嵌入式 js 解释器,它必须能够执行用户提供的代码,但我想知道是否可以在调用任何用户代码之前进行设置以确保如果代码试图无限期地递归(或者即使它只是执行太久),它可以以某种方式中止,抛出一个未捕获的异常,并将问题报告给调用者。

到目前为止,谢谢大家的回复......是的,我在发布这篇文章后不久就意识到,我基本上是在寻求某种解决停止问题的方法,我知道这是无法解决的,实际上远远超出了我的实际需要。

我需要的是某种机制来检测在 v8 环境中运行的某些东西何时足够快地返回,或者只是一种检测递归是否发生的机制......我的用例是最终用户不应该无论如何都在使用任何递归,如果我什至可以检测到这一点,那么我可以在那时拒绝它,而不是盲目地执行它。但是,对于具有不同隔离的不同线程,可以同时调用相同的函数,因此我不能只使用静态局部变量来锁定对同一函数的另一个调用。

4

1 回答 1

3

编译器 [V8 在这种情况下绝对是编译器,即使它不是“总是”编译器] 可以检测递归,但如果代码足够聪明(例如,取决于编译时未知的变量) ,无法检测它是否具有无限递归或有限递归。

我只想说“不允许在 X 秒内执行”,如果执行时间超过那个时间,请中止它。您可以通过拥有一个“看门狗线程”来做到这一点,该线程在代码完成时触发 - 如果看门狗线程运行 X 秒,则终止主线程并向用户代码报告。不,我不知道如何结合 V8 编写这段代码。

于 2014-08-20T23:11:54.283 回答