0

我正在使用受保护的调用成功运行 Duktape JavaScript——实际上是使用 duk_peval() 调用的。

我想捕获无限循环等。我已阅读指南并了解我需要设置一个定期调用的函数,我可以在其中检查是否已经过了太多时间。如果是这样,我返回 1 来解除 duk_peval 调用。但我不明白如何/在哪里设置该函数 - 大概是在 C(++) 中调用duk_peval()并可能在宏中声明它之前。

正确的设置应该是什么样子?

4

1 回答 1

0

我最终为自己破解了这个。

您需要提供三个函数,例如 examples/cmdline/dduk_​​cmdline_lowmem.c 中的示例。您需要三个名称中包含超时的函数。在这个例子中,处理来自字节码执行器的检查的函数是 duk_bool_t lowmem_exec_timeout_check(void *udata)

然后您需要将宏 DUK_USE_EXEC_TIMEOUT_CHECK 设置为此名称并声明函数。就我而言,我在 duktape.h 头文件中添加了以下内容:

#define DUK_USE_EXEC_TIMEOUT_CHECK JSduk_timeout_check // timeout check function
duk_bool_t JSduk_timeout_check(void *udata);

它有效!

于 2020-09-14T17:17:38.853 回答