Duktape - 在C中捕获错误

Lor*_*rem 2 javascript c c++ try-catch duktape

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

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

这是我的代码行:

duk_push_string(ctx,"pouet");
duk_eval(ctx);
Run Code Online (Sandbox Code Playgroud)

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

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

任何的想法?

提前致谢

ble*_*tin 5

你可以"捕获"的JavaScript代码执行过程中通过使用受保护的变体的错误duk_evalduk_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 */
Run Code Online (Sandbox Code Playgroud)

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