C中的Duktape-catch错误

Duktape - catch errors in C

本文关键字:错误 Duktape-catch 中的      更新时间:2023-09-26

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

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

这是我的代码行:

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

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

使用try-catch不会捕获任何

知道吗?

提前感谢

您可以使用受保护的duk_eval变体duk_peval:在执行JavaScript代码时"捕获"错误

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++异常。