C++でbacktrace_symbols()してみたらmanglingされてて読めない件

くだらぬ事に力を使ってしまったなぁという自戒も含みつつ。

ちょっと特定の関数がどっから呼ばれてるかログ取りたいなぁと思ってユーザランドでどうやってスタックトレース取るんだろう?って調べてみたら、backtrace() & backtrace_symbols()が使えるようだけれどいざ実行してみると見事にmanglingされた関数名が出てきて何も読めず、結果をc++filtにかましても何も起きず床に伏せって泣いていたのだが、泣いてても何も変わらないと思い立ちbacktrace_symbols()をクイックハックしてみた。

どうも、FreeBSDにはbacktrace()がlibcへ含まれていない代わりに(これってGNU独自のもの?)libexecinfoというライブラリがあるらしく、こいつを適当にホゲってみる。

ホゲってみた。


びふぉあ。

backtrace:
0x1002ae622 <_ZN10libtorrent3dht9node_impl15add_router_nodeEN5boost4asio2ip14basic_endpointINS4_3udpEEE+66> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x10029d017 <_ZN10libtorrent3dht11dht_tracker21on_router_name_lookupERKN5boost6system10error_codeENS2_4asio2ip23basic_resolver_iteratorINS8_3udpEEE+183> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x1002a2b61 <_ZN5boost4asio19asio_handler_invokeINS0_6detail7binder2INS_3_bi6bind_tIvNS_4_mfi3mf2IvN10libtorrent3dht11dht_trackerERKNS_6system10error_codeENS0_2ip23basic_resolver_iteratorINSF_3udpEEEEENS4_5list3INS4_5valueINS_13intrusive_ptrISA_EEEENS_3argILi1EEENSP_ILi2EEEEEEESC_SI_EEEEvT_z+177> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x1002a44eb <_ZN5boost4asio6detail13handler_queue15handler_wrapperINS1_7binder2INS_3_bi6bind_tIvNS_4_mfi3mf2IvN10libtorrent3dht11dht_trackerERKNS_6system10error_codeENS0_2ip23basic_resolver_iteratorINSG_3udpEEEEENS5_5list3INS5_5valueINS_13intrusive_ptrISB_EEEENS_3argILi1EEENSQ_ILi2EEEEEEESD_SJ_EEE7do_callEPNS2_7handlerE+331> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x10009f3eb <_ZN5boost4asio6detail15task_io_serviceINS1_14kqueue_reactorILb0EEEE3runERNS_6system10error_codeE+971> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x10010fc5c <_ZN10libtorrent3aux12session_implclEv+380> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x1007b4097 <thread_proxy+135> at /opt/local/lib/libboost_thread-mt.dylib
0x7fff85b6cf8e <_pthread_start+331> at /usr/lib/libSystem.B.dylib
0x7fff85b6ce41 <thread_start+13> at /usr/lib/libSystem.B.dylib

あふたー。

backtrace:
0x1002b0736 <libtorrent::dht::node_impl::add_router_node(boost::asio::ip::basic_endpoint<boost::asio::ip::udp>)+70> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x10029df57 <libtorrent::dht::dht_tracker::on_router_name_lookup(boost::system::error_code const&, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::udp>)+183> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x1002a3aa1 <void boost::asio::asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::dht::dht_tracker, boost::system::error_code const&, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::udp> >, boost::_bi::list3<boost::_bi::value<boost::intrusive_ptr<libtorrent::dht::dht_tracker> >, boost::arg<1>, boost::arg<2> > >, boost::system::error_code, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::udp> > >(boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::dht::dht_tracker, boost::system::error_code const&, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::udp> >, boost::_bi::list3<boost::_bi::value<boost::intrusive_ptr<libtorrent::dht::dht_tracker> >, boost::arg<1>, boost::arg<2> > >, boost::system::error_code, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::udp> >, ...)+177> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x1002a542b <boost::asio::detail::handler_queue::handler_wrapper<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf2<void, libtorrent::dht::dht_tracker, boost::system::error_code const&, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::udp> >, boost::_bi::list3<boost::_bi::value<boost::intrusive_ptr<libtorrent::dht::dht_tracker> >, boost::arg<1>, boost::arg<2> > >, boost::system::error_code, boost::asio::ip::basic_resolver_iterator<boost::asio::ip::udp> > >::do_call(boost::asio::detail::handler_queue::handler*)+331> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x1000a032b <boost::asio::detail::task_io_service<boost::asio::detail::kqueue_reactor<false> >::run(boost::system::error_code&)+971> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x100110b9c <libtorrent::aux::session_impl::operator()()+380> at /Users/syuu/Downloads/libtorrent-rasterbar-0.14.8/src/.libs/libtorrent-rasterbar.5.dylib
0x1007b5097 <thread_proxy+135> at /opt/local/lib/libboost_thread-mt.dylib
0x7fff85b6cf8e <_pthread_start+331> at /usr/lib/libSystem.B.dylib
0x7fff85b6ce41 <thread_start+13> at /usr/lib/libSystem.B.dylib

結局読みにくいのかわんねーぢゃねーか!