Il mio progetto contiene una libreria condivisa e un client exe. Ho scoperto che la mia classe di eccezione generata dalla libreria non viene catturata dal blocco catch del client e il programma termina con il messaggio "termina dopo aver lanciato un'istanza di ...". Continuando a giocare con il progetto, ho scoperto che nessuna eccezione di alcun tipo non viene catturata. Ad esempio, questa cattura non funziona: messaggioLe eccezioni non vengono rilevate nel programma GCC
try { m_pSerialPort = new boost::asio::serial_port(m_IoService, "non-existing-port"); } catch(const boost::system::system_error& e) { // ... }
Errore:
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
versione GCC 4.4.1 è, il sistema operativo Linux. Lo stesso codice è in esecuzione correttamente in Windows, MSVC. Quale motivo può impedire al programma GCC di rilevare correttamente le eccezioni?
Potrebbe gentilmente postare il Makefile in modo che possiamo vedere quali argomenti stai passando a gcc? È possibile passare argomenti che disabilitano le eccezioni. –
Informazioni aggiuntive: quando aggiungo questo codice: prova {throw 1;} catch (int) {} all'eseguibile del client, tutto è OK. Ma lo stesso codice nella libreria condivisa dà: terminare chiamato dopo aver lanciato un'istanza di "int" –
Compilatore appariscente: domanda tecnica. Come posso pubblicare Makefile qui? Il commento è limitato dalla lunghezza e non consente alcuna formattazione. –