3

我今天刚开始在我的 C++ 框架中使用 Duktape,我已经阅读了整个 api,但无法理解如何捕获错误。我发现了一些关于放入堆栈的错误对象的线索但是,每次出现错误(例如无效的 javascript 语法)时,一切都会变得疯狂,我得到一个 SEGFAULT。

我目前正在使用 duk_eval 函数评估一些 js 行

这是我的代码行:

duk_push_string(ctx,"pouet");
duk_eval(ctx);

ctx是您在创建 duktape 堆时提供的基本上下文

使用 try-catch 不会捕获任何东西

任何想法?

提前致谢

4

1 回答 1

6

您可以使用以下受保护的变体在 JavaScript 代码执行期间“捕获”duk_eval错误duk_peval

duk_push_string(ctx, "syntax error=");
if (duk_peval(ctx) != 0) {
    printf("eval failed: %s\n", duk_safe_to_string(ctx, -1));
} else {
    printf("result is: %s\n", duk_safe_to_string(ctx, -1));
}
duk_pop(ctx);  /* pop result */

不要将 JavaScript 代码触发的异常与 C++ 异常混淆:Duktape 是用 C 实现的,不了解 C++ 标准库提供的功能。当使用不受保护的duk_eval功能变体时,应用程序默认终止。您可以通过分配自己的致命处理程序来更改它,在您的情况下,如果需要,它可能会引发 C++ 异常。

于 2014-11-21T13:37:51.700 回答