Я только что начал использовать Duktape в своей среде C ++ сегодня, и я прочитал весь API, не понимая, как я могу ловить ошибки. Я нашел некоторые подсказки об объекте ошибки, который помещается в стек. Однако каждый раз, когда возникает ошибка (например, неверный синтаксис javascript), все сходит с ума, и я получаю SEGFAULT.
В настоящее время я оцениваю некоторые строки js с помощью функции duk_eval
Вот мои строки кода:
duk_push_string(ctx,"pouet");
duk_eval(ctx);
ctx
является базовым контекстом, который вы предоставляете при создании кучи duktape
Использование try-catch ничего не ловит
Любая идея?
заранее спасибо
Вы можете «ловить» ошибки во время выполнения кода JavaScript, используя защищенный вариант duk_eval
который 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 ++. При использовании незащищенных duk_eval
вариант функции приложение прекращено по умолчанию. Вы можете изменить это назначение собственного фатального обработчика, который в вашем случае может вызвать исключение C ++ при желании.