Почему я не могу поймать исключение luabind :: error, если мой код lua выдает ошибку?

Когда вы вызываете функцию LUA из c ++ и возникает ошибка времени выполнения, LuaBind выдает исключение luabind :: error, которое вы можете перехватить, а затем прочитать стек, чтобы узнать, в чем была ошибка. Мой отладчик определенно перехватывает это исключение, но когда я позволяю отладчику продолжить работу, вместо того, чтобы исключение было обнаружено в моем коде, программа немедленно завершается.

Исключение выбрасывается в call_member.hpp в включаемых файлах LuaBind из деструктора ~ proxy_member_void_caller ().

Проблема возникает с простым тестовым кодом. Я использую Xcode 5 с LuaBind 0.9.1.


person Sean Dawson    schedule 09.05.2014    source источник


Ответы (1)


Оказывается, выбрасывать исключения в деструкторах - это плохая практика. В C ++ 11 деструкторы неявно noexcept(true), поэтому при возникновении исключения программа завершается. LuaBind использует исключения в деструкторах, поэтому в моем современном компиляторе программа завершается. Редактирование сигнатуры метода на:

~proxy_member_void_caller() noexcept(false) {}

позволяет перехватывать исключения из LuaBind в C ++ 11.

person Sean Dawson    schedule 09.05.2014
comment
Это немного больше, чем просто плохая практика! - person Lightness Races in Orbit; 10.05.2014
comment
Кто подбрасывает деструкторы, честно! - person W.B.; 10.05.2014
comment
В дополнение к ~ proxy_member_void_caller () вам также необходимо исправить ~ proxy_member_caller () в том же файле. Кроме того, вы, вероятно, захотите получить аналогичные в call_function.hpp. - person radman; 01.03.2018