我正在尝试从MacOSX 10.5上的Boost asio示例运行blocking_udp_echo_server.cpp。
但它崩溃了:
From the console:
/Developer/SDKs/MacOSX10.5.sdk/usr/include/c++/4.0.0/debug/safe_iterator.h:127:
error: attempt to copy-construct an iterator from a singular iterator.
Objects involved in the operation:
iterator "this" @ 0x0x100420 {
type = N11__gnu_debug14_Safe_iteratorIN10__gnu_norm14_List_iteratorISt4pairIiPN5boost4asio6detail16reactor_op_queueIiE7op_baseEEEEN15__gnu_debug_def4listISB_SaISB_EEEEE
(mutable iterator);
state = singular;
}
iterator "other" @ 0x0xbfffee64 {
type = N11__gnu_debug14_Safe_iteratorIN10__gnu_norm14_List_iteratorISt4pairIiPN5boost4asio6detail16reactor_op_queueIiE7op_baseEEEEN15__gnu_debug_def4listISB_SaISB_EEEEE
(mutable iterator);
state = singular;
}
Program received signal: “SIGABRT”.
来自backtrace:
(gdb) bt
#0 0x918c3e42 in __kill ()
#1 0x918c3e34 in kill$UNIX2003 ()
#2 0x9193623a in raise ()
#3 0x91942679 in abort ()
#4 0x940d96f9 in __gnu_debug::_Error_formatter::_M_error ()
#5 0x0000ada6 in
__gnu_debug::_Safe_iterator<__gnu_norm::_List_iterator<std::pair<int,
boost::asio::detail::reactor_op_queue<int>::op_base*> >,
__gnu_debug_def::list<std::pair<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>,
std::allocator<std::pair<int,
boost::asio::detail::reactor_op_queue<int>::op_base*> > >
>::_Safe_iterator (this=0x100420, __x=@0xbfffee64) at
debug/safe_iterator.h:124
#6 0x00010195 in boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type::bucket_type
(this=0x100420) at hash_map.hpp:277
#7 0x0001291d in std::_Construct<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
(__p=0x100420, __value=@0xbfffee64) at stl_construct.h:81
#8 0x00012edd in
std::__uninitialized_fill_n_aux<__gnu_cxx::__normal_iterator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type*,
__gnu_norm::vector<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
std::allocator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type> >
>, unsigned long, boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
(__first={_M_current = 0x100420}, __n=3, __x=@0xbfffee64) at
stl_uninitialized.h:194
#9 0x00012f67 in
std::uninitialized_fill_n<__gnu_cxx::__normal_iterator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type*,
__gnu_norm::vector<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
std::allocator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type> >
>, unsigned long, boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
(__first={_M_current = 0x100420}, __n=3, __x=@0xbfffee64) at
stl_uninitialized.h:218
#10 0x00012f8f in
std::__uninitialized_fill_n_a<__gnu_cxx::__normal_iterator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type*,
__gnu_norm::vector<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
std::allocator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type> >
>, unsigned long, boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
(__first={_M_current = 0x100420}, __n=3, __x=@0xbfffee64) at
stl_uninitialized.h:310
#11 0x000134ba in
__gnu_norm::vector<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
std::allocator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
>::_M_fill_insert (this=0x1002f0, __position={_M_current = 0x0},
__n=3, __x=@0xbfffee64) at vector.tcc:365
#12 0x00013760 in
__gnu_norm::vector<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
std::allocator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
>::insert (this=0x1002f0, __position={_M_current = 0x0}, __n=3,
__x=@0xbfffee64) at stl_vector.h:658
#13 0x00013807 in
__gnu_norm::vector<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
std::allocator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
>::resize (this=0x1002f0, __new_size=3, __x=@0xbfffee64) at
stl_vector.h:427
#14 0x000138c0 in
__gnu_debug_def::vector<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type,
std::allocator<boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::bucket_type>
>::resize (this=0x1002f0, __sz=3, __c=@0xbfffee64) at debug/vector:169
#15 0x0001400e in boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::rehash
(this=0x1002c4, num_buckets=3) at hash_map.hpp:221
#16 0x0001443b in boost::asio::detail::hash_map<int,
boost::asio::detail::reactor_op_queue<int>::op_base*>::hash_map
(this=0x1002c4) at hash_map.hpp:67
#17 0x000144c4 in
boost::asio::detail::reactor_op_queue<int>::reactor_op_queue
(this=0x1002c0) at reactor_op_queue.hpp:42
#18 0x00014574 in
boost::asio::detail::kqueue_reactor<false>::kqueue_reactor
(this=0x100270, io_service=@0xbffff7a4) at kqueue_reactor.hpp:86
#19 0x00014850 in
boost::asio::detail::service_registry::use_service<boost::asio::detail::kqueue_reactor<false>
> (this=0x100180) at service_registry.hpp:109
#20 0x0001499d in
boost::asio::use_service<boost::asio::detail::kqueue_reactor<false> >
(ios=@0xbffff7a4) at impl/io_service.ipp:195
#21 0x00014abd in
boost::asio::detail::reactive_socket_service<boost::asio::ip::udp,
boost::asio::detail::kqueue_reactor<false> >::reactive_socket_service
(this=0x100250, io_service=@0xbffff7a4) at
reactive_socket_service.hpp:111
#22 0x00014b94 in
boost::asio::detail::service_registry::use_service<boost::asio::detail::reactive_socket_service<boost::asio::ip::udp,
boost::asio::detail::kqueue_reactor<false> > > (this=0x100180) at
service_registry.hpp:109
#23 0x00014ce1 in
boost::asio::use_service<boost::asio::detail::reactive_socket_service<boost::asio::ip::udp,
boost::asio::detail::kqueue_reactor<false> > > (ios=@0xbffff7a4) at
impl/io_service.ipp:195
#24 0x00014d25 in
boost::asio::datagram_socket_service<boost::asio::ip::udp>::datagram_socket_service
(this=0x100230, io_service=@0xbffff7a4) at
datagram_socket_service.hpp:95
#25 0x00014dee in
boost::asio::detail::service_registry::use_service<boost::asio::datagram_socket_service<boost::asio::ip::udp>
> (this=0x100180) at service_registry.hpp:109
#26 0x00014f3b in
boost::asio::use_service<boost::asio::datagram_socket_service<boost::asio::ip::udp>
> (ios=@0xbffff7a4) at impl/io_service.ipp:195
#27 0x00014f61 in
boost::asio::basic_io_object<boost::asio::datagram_socket_service<boost::asio::ip::udp>
>::basic_io_object (this=0xbffff6a4, io_service=@0xbffff7a4) at
basic_io_object.hpp:72
#28 0x00014fd3 in boost::asio::basic_socket<boost::asio::ip::udp,
boost::asio::datagram_socket_service<boost::asio::ip::udp>
>::basic_socket (this=0xbffff6a4, io_service=@0xbffff7a4,
endpoint=@0xbffff6b8) at basic_socket.hpp:108
#29 0x000150b5 in
boost::asio::basic_datagram_socket<boost::asio::ip::udp,
boost::asio::datagram_socket_service<boost::asio::ip::udp>
>::basic_datagram_socket (this=0xbffff6a4, io_service=@0xbffff7a4,
endpoint=@0xbffff6b8) at basic_datagram_socket.hpp:107
#30 0x00002022 in server (io_service=@0xbffff7a4, port=8090) at
/Users/n179911/Documents/ServerXCode/main.cpp:21
#31 0x0000217a in main (argc=2, argv=0xbffff7e8) at
/Users/n179911/Documents/ServerXCode/main.cpp:47
(gdb)
任何人都有任何想法?
答案 0 :(得分:0)
据我所知,单个值上唯一保证的操作是分配一个非奇异的操作。由于我认为lib代码没问题,我得到的印象是你的问题与构建过程更相关:
我会尝试以下方法来精确定位探测器:
使用大量优化有时会导致问题,在极少数情况下也可能会进行默认优化。删除所有优化。
如果使用其他编译器构建boost作为可能导致问题的代码。如果您没有使用相同的编译器自己构建它,请尝试它。可能它甚至不会建立。
使用第一个编译器修订版(4.0.0,3.0.0等..)可能也是一个问题,因为那些主要是错误的(至少在GNU cc的情况下)。尝试4.1或其他。