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

当您从 C++ 调用 LUA 函数并且出现运行时错误时,LuaBind 抛出一个 luabind::error 异常,您可以捕获然后读取堆栈以查看错误。我的调试器肯定会捕获这个异常,但是当我让调试器继续时,程序立即终止,而不是在我的代码中捕获异常。

该异常在 "call_member.hpp" 中的 LuaBind 包含文件中的析构函数 ~proxy_member_void_caller() 中抛出。

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

点赞
用户1153203
用户1153203

原来,在析构函数中抛出异常是不好的做法。在 C++11 中析构函数默认是 noexcept(true) 的,所以如果出现异常,程序就会终止。LuaBind 在析构函数中使用异常,因此在现代编译器上程序就会终止。将方法签名修改为:

~proxy_member_void_caller() noexcept(false) {}

可以在 c++11 中捕获 LuaBind 的异常。

2014-05-09 21:33:24