Mi proyecto contiene una biblioteca compartida y un cliente exe. Descubrí que mi clase de excepción lanzada desde la biblioteca no es atrapada por el bloque catch del cliente, y el programa finaliza con el mensaje "terminar llamado después de lanzar una instancia de ...". Siguiendo jugando con el proyecto, descubrí que no se detecta ninguna excepción de ningún tipo. Por ejemplo, esta captura no funciona: Mensaje deLas excepciones no se detectan en el programa GCC
try { m_pSerialPort = new boost::asio::serial_port(m_IoService, "non-existing-port"); } catch(const boost::system::system_error& e) { // ... }
error:
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
versión de GCC es 4.4.1, sistema operativo Linux. El mismo código se ejecuta correctamente en Windows, MSVC. ¿Qué razón puede evitar que el programa GCC capte las excepciones correctamente?
¿Podría publicar amablemente el Makefile para que podamos ver qué argumentos está pasando a gcc? Puede pasar argumentos que deshabiliten excepciones. –
Información adicional: cuando agregue este código: pruebe {throw 1;} catch (int) {} con el ejecutable del cliente, todo está bien. Pero el mismo código en la biblioteca compartida da: terminate called después de lanzar una instancia de 'int' –
Conspicuous Compiler: pregunta técnica. ¿Cómo puedo publicar Makefile aquí? El comentario está restringido por la longitud y no permite ningún formato. –