Мой проект содержит общую библиотеку и исполняемый клиент. Я обнаружил, что мой собственный класс исключений, выданный из библиотеки, не перехватывается клиентским блоком перехвата, и программа завершается с сообщением «terminate вызывают после выброса экземпляра ...» Продолжая играть с проектом, я обнаружил, что ни одно исключение любого типа не ловится. Например, этот улов не работает:
try
{
m_pSerialPort = new boost::asio::serial_port(m_IoService, "non-existing-port");
}
catch(const boost::system::system_error& e)
{
// ...
}
Сообщение об ошибке:
terminate called after throwing an instance of
'boost::exception_detail::clone_impl
<boost::exception_detail::error_info_injector
<boost::system::system_error> >'
what(): No such file or directory
Версия GCC 4.4.1, ОС Linux. Тот же код успешно работает в Windows, MSVC.
Какая причина может помешать программе GCC правильно перехватывать исключения?