为什么当我的lua代码抛出错误时,我无法捕获luabind::error异常?

Why can't I catch a luabind::error exception when my lua code throws an error?

本文关键字:luabind 异常 error lua 我的 代码 错误 出错 为什么      更新时间:2023-10-16

当你从c++调用LUA函数时,如果有一个运行时错误,LuaBind会抛出LuaBind::error异常,你可以捕捉到这个异常,然后读取堆栈来查看错误是什么。我的调试器肯定捕获了这个异常,但是当我让调试器继续运行时,而不是在我的代码中捕获异常,程序立即终止。

在LuaBind中的"call_member.hpp"中抛出异常,该异常来自析构函数~proxy_member_void_caller()。

问题发生在简单的测试代码中。我使用Xcode 5与LuaBind 0.9.1。

在析构函数中抛出异常是不好的做法。在c++ 11中,析构函数是隐式的noexcept(true),因此如果发生异常,程序将终止。LuaBind在析构函数中使用异常,因此在我的现代编译器上程序终止。将方法签名编辑为:

~proxy_member_void_caller() noexcept(false) {}

允许您在c++11中从LuaBind捕获异常。