我今天刚开始在我的C ++框架中使用Duktape,而且我已经阅读了整个api而无法理解如何捕获错误。我找到了一些关于放在堆栈上的错误对象的线索但是,每次出现错误时(例如无效的javascript语法),一切都变得疯狂,我得到了一个SEGFAULT。
我目前正在使用duk_eval函数评估一些js行
这是我的代码行:
duk_push_string(ctx,"pouet");
duk_eval(ctx);
ctx
是您在创建duktape堆时提供的基本上下文
使用try-catch不会捕获任何内容
有什么想法吗?
提前致谢
答案 0 :(得分:5)
您可以使用duk_eval
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 */
的{{1}}受保护变体在执行JavaScript代码时“捕获”错误:
duk_eval
不要将JavaScript代码触发的异常与C ++异常混淆:Duktape是用C实现的,不知道C ++标准库提供的功能。使用未受保护的{{1}}函数变体时,应用程序为duk_peval
。您可以通过terminated by default更改它,在您的情况下,如果需要可以抛出C ++异常。