微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

由于boost :: log :: v2_mt_posix :: sources :: aux :: logger_holder的shared_ptr而导致BOOST_LOG_SEV崩溃,在应用程序退出时就被破坏了

如何解决由于boost :: log :: v2_mt_posix :: sources :: aux :: logger_holder的shared_ptr而导致BOOST_LOG_SEV崩溃,在应用程序退出时就被破坏了

我们正在使用boost日志库进行应用程序日志记录。 这是我们正在使用的记录器: boost::log::sources::severity_logger_mt<boost::log::trivial::severity_level> logger_type; 对于日志记录,我们使用宏: BOOST_LOG_SEV(::boost::log::sources::aux::logger_singleton< logger >::get(),static_cast<boost::log::trivial::severity_level>(sever_level));

我们面临的一个问题是,在应用程序退出时,内部boost日志的boost::shared_ptr<boost::log::v2_mt_posix::sources::aux::logger_holder boost :: shared_ptr被破坏了。 由于这是lazy_singleton类,因此我们不确定是什么原因导致其早期破坏。 在我们的应用程序退出序列中,仍然只有很少的地方可以访问记录器进行记录,最终以SEGV结尾。

以下是AddressSanitizer库的摘要

29198==ERROR: AddressSanitizer: heap-use-after-free on address 0x60e00001c0b0 at pc 0x7f2183876711 bp 0x7fffb861d310 sp 0x7fffb861d308
READ of size 8 at 0x60e00001c0b0 thread T0 (product.exe)
    #0 0x7f2183876710 in boost::shared_ptr<boost::log::v2_mt_posix::core>::operator->() const lnx86/asan/include/TPtools/boost/smart_ptr/shared_ptr.hpp:735
    #1 0x7f2183875854 in boost::log::v2_mt_posix::record boost::log::v2_mt_posix::sources::basic_composite_logger<char,boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>,boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>,boost::log::v2_mt_posix::sources::features<boost::log::v2_mt_posix::sources::severity<boost::log::v2_mt_posix::trivial::severity_level> > >::open_record<boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity,boost::log::v2_mt_posix::trivial::severity_level const> > >(boost::parameter::aux::tagged_argument_list_of_1<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity,boost::log::v2_mt_posix::trivial::severity_level const> > const&) (lib/libcustomlogger.so+0xfb854)
    #2 0x7f21838737a9 in logs::ostream::~ostream() ../src/logger.cpp:76
   .....
    #23 0x33ac635b21 in exit (/lib64/libc.so.6+0x33ac635b21)
    #24 0x33ac61ed63 in __libc_start_main (/lib64/libc.so.6+0x33ac61ed63)
    #25 0x5bed58  (/bin/product.exe+0x5bed58)

0x60e00001c0b0 is located 112 bytes inside of 152-byte region [0x60e00001c040,0x60e00001c0d8)
freed by thread T0 (product.exe) here:
    #0 0x7f21bd610820 in operator delete(void*,unsigned long) (lib/libasan.so.3+0xc3820)
    #1 0x7f218387a2ee in boost::detail::sp_counted_impl_pd<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >*,boost::detail::sp_ms_deleter<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > > >::~sp_counted_impl_pd() (lib/libcustomlogger.so+0x1002ee)
    #2 0x7f21838745bd in boost::detail::sp_counted_base::destroy() lnx86/asan/include/TPtools/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp:91
    #3 0x7f21838746f8 in boost::detail::sp_counted_base::weak_release() lnx86/asan/include/TPtools/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp:126
    #4 0x7f2183874670 in boost::detail::sp_counted_base::release() lnx86/asan/include/TPtools/boost/smart_ptr/detail/sp_counted_base_std_atomic.hpp:113
    #5 0x7f2183874785 in boost::detail::shared_count::~shared_count() lnx86/asan/include/TPtools/boost/smart_ptr/detail/shared_count.hpp:427
    #6 0x7f2183876f87 in boost::shared_ptr<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > >::~shared_ptr() lnx86/asan/include/TPtools/boost/smart_ptr/shared_ptr.hpp:341
    #7 0x33ac635b21 in exit (/lib64/libc.so.6+0x33ac635b21)

prevIoUsly allocated by thread T0 (product.exe) here:
    #0 0x7f21bd60fc20 in operator new(unsigned long) (lib/libasan.so.3+0xc2c20)
    #1 0x7f21838798bc in boost::detail::shared_count::shared_count<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >*,boost::detail::sp_ms_deleter<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > > >(boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >*,boost::detail::sp_inplace_tag<boost::detail::sp_ms_deleter<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > > >) lnx86/asan/include/TPtools/boost/smart_ptr/detail/shared_count.hpp:214
    #2 0x7f2183879138 in boost::shared_ptr<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > >::shared_ptr<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >,boost::detail::sp_inplace_tag<boost::detail::sp_ms_deleter<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > > > >(boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >*,boost::detail::sp_inplace_tag<boost::detail::sp_ms_deleter<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > > >) lnx86/asan/include/TPtools/boost/smart_ptr/shared_ptr.hpp:388
    #3 0x7f21838785ed in boost::detail::sp_if_not_array<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> > >::type boost::make_shared<boost::log::v2_mt_posix::sources::aux::logger_holder<boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >,char const*,unsigned int,boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level> >(char const*&&,unsigned int&&,boost::log::v2_mt_posix::sources::severity_logger_mt<boost::log::v2_mt_posix::trivial::severity_level>&&) lnx86/asan/include/TPtools/boost/smart_ptr/make_shared_object.hpp:250
    #4 0x7f2183877e47 in boost::log::v2_mt_posix::sources::aux::logger_singleton<logger>::construct_logger() (lib/libcustomlogger.so+0xfde47)
    #5 0x7f21818c9aeb in boost::log::v2_mt_posix::sources::aux::global_storage::get_or_init(boost::typeindex::stl_type_index,boost::shared_ptr<boost::log::v2_mt_posix::sources::aux::logger_holder_base> (*)()) (tools/TPtools/boost/lib/64bit/libboost_log.so.1.71.0+0x6daeb)

我们如何知道/或控制何时破坏logger_holder的lazy_singleton类? 还是有什么办法事先知道是否释放了logger_holder,以便我们的应用程序可以跳过退出顺序的日志记录?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?