Duktape - 在C中捕获错误

时间:2014-10-16 22:36:22

标签: javascript c++ c try-catch duktape

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

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

这是我的代码行:

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

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

使用try-catch不会捕获任何内容

有什么想法吗?

提前致谢

1 个答案:

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