
So when my app crashes, here is the message I see on the console: (if I don't have a set_terminate handler installed) terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info _injector<boost::system::system_error> >' what(): Broken pipe here is a more complete stack trace: (when I set a breakpoint in the set_terminate handler) EnginePrototype [C/C++ Application] gdb/mi (7/15/09 1:29 PM) (Suspended) Thread [1] (Suspended) Thread [2] (Suspended) Thread [3] (Suspended: Signal 'SIGABRT' received. Description: Aborted.) 34 raise() 0x00007f5dc63b6fb5 33 abort() 0x00007f5dc63b8bc3 32 <symbol is not available> 0x00007f5dc6c5a4bb 31 <symbol is not available> 0x00007f5dc6c596ab 30 __gxx_personality_v0() 0x00007f5dc6c5a278 29 <symbol is not available> 0x00007f5dc6706ff3 28 _Unwind_Resume() 0x00007f5dc67070b8 27 ~ProtoBufStreamAdaptor() /home/noirs/workspace/projectPrototype/EnginePrototype/src/web/ProtoBufS treamAdaptor.cpp:10 0x000000000042c75d 26 CEngineWebServer::HandleGetNeighbors() /home/noirs/workspace/projectPrototype/EnginePrototype/src/web/EngineWeb Server.cpp:215 0x000000000041d350 25 CEngineWebServer::OnHttpRequest() /home/noirs/workspace/projectPrototype/EnginePrototype/src/web/EngineWeb Server.cpp:89 0x000000000041e808 24 CBaseWebServer::HandleHTTPRequest() /home/noirs/workspace/projectPrototype/EnginePrototype/src/web/BaseWebSe rver.cpp:105 0x00000000004092af 23 CBaseWebServer::HandleAccept() /home/noirs/workspace/projectPrototype/EnginePrototype/src/web/BaseWebSe rver.cpp:74 0x0000000000409aaa 22 boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>::operator() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/bind/mem_fn_te mplate.hpp:274 0x000000000040eb2c 21 boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()>::operator()<boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list1<boost::system::error_code&> >() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/bind/bind.hpp: 385 0x000000000040ed1e 20 boost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >::operator()<boost::system::error_code>() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/bind/bind_temp late.hpp:32 0x000000000040ed92 19 boost::asio::detail::binder1<boost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code>::operator() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/bi nd_handler.hpp:39 0x000000000040edb1 18 boost::asio::asio_handler_invoke<boost::asio::detail::binder1<boost::_bi ::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code> >() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/handler_i nvoke_hook.hpp:63 0x000000000040ee4c 17 boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder1<b oost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> > >() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/ha ndler_invoke_helpers.hpp:39 0x000000000040ee80 16 boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder1<bo ost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code>, boost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code>() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/bi nd_handler.hpp:72 0x000000000040eed3 15 boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder1<b oost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code>, boost::asio::detail::binder1<boost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code> >() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/ha ndler_invoke_helpers.hpp:39 0x000000000040eef2 14 boost::asio::detail::handler_queue::handler_wrapper<boost::asio::detail: :binder1<boost::_bi::bind_t<void, boost::_mfi::mf2<void, CBaseWebServer, boost::shared_ptr<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > >, boost::system::error_code const&>, boost::_bi::list3<boost::_bi::value<CBaseWebServer*>, boost::_bi::value<boost::shared_ptr<boost::asio::basic_stream_socket<boo st::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> > > >, boost::arg<1> (*)()> >, boost::system::error_code> >::do_call() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/ha ndler_queue.hpp:192 0x00000000004109f4 13 boost::asio::detail::handler_queue::handler::invoke() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/ha ndler_queue.hpp:39 0x000000000040a67c 12 boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor< false> >::do_one() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/ta sk_io_service.hpp:268 0x000000000041a5fd 11 boost::asio::detail::task_io_service<boost::asio::detail::epoll_reactor< false> >::run() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/detail/ta sk_io_service.hpp:103 0x000000000041a82a 10 boost::asio::io_service::run() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/asio/impl/io_s ervice.ipp:58 0x000000000041a95c 9 CBaseWebServer::RunIoService() /home/noirs/workspace/projectPrototype/EnginePrototype/src/web/BaseWebSe rver.cpp:37 0x0000000000409c3c 8 boost::_mfi::mf0<void, CBaseWebServer>::operator() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/bind/mem_fn_te mplate.hpp:49 0x000000000040e7c2 7 boost::_bi::list1<boost::_bi::value<CBaseWebServer*>
::operator()<boost::_mfi::mf0<void, CBaseWebServer>, boost::_bi::list0>() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/bind/bind.hpp: 246 0x000000000040e805 6 boost::_bi::bind_t<void, boost::_mfi::mf0<void, CBaseWebServer>, boost::_bi::list1<boost::_bi::value<CBaseWebServer*> > >::operator() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/bind/bind_temp late.hpp:20 0x000000000040e842 5 boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, CBaseWebServer>, boost::_bi::list1<boost::_bi::value<CBaseWebServer*> > > >::run() /home/noirs/workspace/projectPrototype/boost_1_39_0/boost/thread/detail/ thread.hpp:56 0x000000000040e860 4 thread_proxy() 0x00000000004d6818 3 start_thread() 0x00007f5dc6ea73ba 2 clone() 0x00007f5dc6469fcd 1 <symbol is not available> 0x0000000000000000 gdb (7/15/09 1:29 PM)
/home/noirs/workspace/projectPrototype/EnginePrototype/Debug/EngineProto type (7/15/09 1:29 PM) Here are some snippets from my code in that stack: void CBaseWebServer::RunIoService() { try { m_IoService.run(); } catch ( ... ) { cout << endl << "Unhandled exception in RunIoService" << endl; } } void CBaseWebServer::HandleAccept(shared_ptr<tcp::socket> pSocket, const boost::system::error_code& error) { if ( !error ) { try { HandleHTTPRequest(pSocket); StartAccept(); } catch ( ... ) { cout << endl << "Unhandled exception in HandleAccept" << endl; } } else { cout << endl << "HandleAccept received error: " << error.message().c_str() << endl; } }
-----Original Message----- From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Emil Dotchevski Sent: Wednesday, July 15, 2009 1:21 PM To: boost-users@lists.boost.org Subject: Re: [Boost-users] Unable to catch exception using boost::asio
On Wed, Jul 15, 2009 at 10:10 AM, Alex Black <alex@alexblack.ca> wrote:
You mentioned never throwing exceptions in destructors - sounds like good advice, thx. Two points though: 1. If an exception is thrown in a destructor can it not be caught with a try catch( ... )?
If a destructor calls functions that may throw, it should use catch(...) and not let exceptions propagate out of the destructor itself. However, when writing or sending data, the user may want to know that the operation has completed successfully. Typically, you'd provide a separate flush function for that use case, which you'd then call in the destructor, as in:
foo_sender::~foo_sender() { try { flush(); } catch(...) { } }
Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode _______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users