当在duktape中遇到错误时,目前是否有办法让duktape正确展开C ++堆栈(调用所有适当的析构函数等)?
我知道Lua(例如)有能力通过使用longjmp切换到C ++异常,当Lua由C ++编译器编译时,但是乍一看我没有看到类似的东西duktape,我绝对不会被C ++析构函数所取消。如果duktape中还没有这种能力,那么它有什么计划吗? (如果longjmp目的地以严格的LIFO方式设置和使用,我猜它是可行的。如果没有,那么可能不那么可行......)
我一直在玩duktape,到目前为止,我印象深刻......我主要完成了一个基于C ++模板的元编程库,可以让你自动创建duktape绑定到C ++函数。尽管如此......如果我不能相信我的C ++析构函数可以被调用,那么这个堆栈放松的东西可能是一个彻底的交易破坏者。
编辑:实际上,经过进一步的反思,我可以在没有堆栈展开的情况下使工作正常工作,尽管当然一切都会变得更加复杂和容易出错。它仍然是一个很棒的功能。
答案 0 :(得分:3)
作为快速更新:Duktape 1.4.0支持使用C ++异常进行长控制传输(https://github.com/svaarala/duktape/tree/master/examples/cpp-exceptions):
DUK_OPT_CPP_EXCEPTIONS
,请定义DUK_USE_CPP_EXCEPTIONS
(duk_config.h
并使用C ++编译器进行编译。答案 1 :(得分:1)
从Duktape 1.2开始,还没有支持用C ++异常友好的try-catch机制替换setjmp / longjmp(用于Duktape内部的错误处理)。计划对未来版本提供支持。
答案 2 :(得分:0)
不幸的是,您没有提供任何代码示例,所以我的猜测是您没有在duk_create_heap
中设置致命错误处理程序,而您当前正在使用未受保护的代码执行变体,例如{ {3}}。您应该尝试使用duk_eval
之类的protected code execution函数变体。