javascript - Duktape - 在 C 中捕获错误

标签 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 不捕获任何东西

有什么想法吗?

提前致谢

最佳答案

通过使用 duk_eval 的 protected 变体,您可以在执行 JavaScript 代码期间“捕获”错误,即 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++ 标准库提供的特性。当使用未 protected duk_eval 函数变体时,应用程序是 terminated by default .您可以通过 assigning an own fatal handler 更改它,如果需要,在您的情况下可能会抛出 C++ 异常。

关于javascript - Duktape - 在 C 中捕获错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26415047/

相关文章:

c++ - 使用 NAN 在 Node.js 的 C++ 模块中未调用 SetAccessor 函数

c++ - 函数本地静态函数为Windows XP生成错误代码

java - 使用 JNI 从单独的线程调用静态 Java 方法

日期比较函数

c - 链表中的节点交换

php - 通过 $_COOKIE 从 javascript cookie 到 php 输出的西里尔字符

javascript - JavaScript 中 and 运算符的行为

javascript - 我们如何在播放视频 10 分钟后让 div 可见

javascript - 返回句子中重复字符的最大数量

c++ - 无法在 Visual Studio 2010 中更改输出的文本颜色和文本背景