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

程序终止时为什么会在 boost 日志中崩溃

如何解决程序终止时为什么会在 boost 日志中崩溃

我的应用程序使用了 boost 记录器。当我使用 killall myApplication 终止我的程序时。生成了核心文件。然后我使用 gdb 并查看跟踪。我也尝试了一些相关的修复,但没有用。 link

#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007ff95f9aa801 in __GI_abort () at abort.c:79
#2  0x00007ff96240f84a in __gnu_cxx::__verbose_terminate_handler ()
    at /home/nwani/m3/conda-bld/compilers_linux-64_1560109574129/work/.build/x86_64-conda_cos6-linux-gnu/src/gcc/libstdc++-v3/libsupc++/vterminate.cc:95
#3  0x00007ff96240df47 in __cxxabiv1::__terminate (handler=<optimized out>)
    at /home/nwani/m3/conda-bld/compilers_linux-64_1560109574129/work/.build/x86_64-conda_cos6-linux-gnu/src/gcc/libstdc++-v3/libsupc++/eh_terminate.cc:47
#4  0x00007ff96240d3a5 in __cxa_call_terminate (ue_header=ue_header@entry=0x55c83e48bfd0)
    at /home/nwani/m3/conda-bld/compilers_linux-64_1560109574129/work/.build/x86_64-conda_cos6-linux-gnu/src/gcc/libstdc++-v3/libsupc++/eh_call.cc:54
#5  0x00007ff96240dbd8 in __cxxabiv1::__gxx_personality_v0 (version=<optimized out>,actions=6,exception_class=5138137972254386944,ue_header=0x55c83e48bfd0,context=0x7ffc786aaa90)
    at /home/nwani/m3/conda-bld/compilers_linux-64_1560109574129/work/.build/x86_64-conda_cos6-linux-gnu/src/gcc/libstdc++-v3/libsupc++/eh_personality.cc:677
#6  0x00007ff96235aaab in _Unwind_RaiseException_Phase2 (exc=exc@entry=0x55c83e48bfd0,context=context@entry=0x7ffc786aaa90,frames_p=frames_p@entry=0x7ffc786aa998)
    at /home/nwani/m3/conda-bld/compilers_linux-64_1560109574129/work/.build/x86_64-conda_cos6-linux-gnu/src/gcc/libgcc/unwind.inc:64
#7  0x00007ff96235af49 in _Unwind_Resume (exc=0x55c83e48bfd0) at /home/nwani/m3/conda-bld/compilers_linux-64_1560109574129/work/.build/x86_64-conda_cos6-linux-gnu/src/gcc/libgcc/unwind.inc:241
#8  0x000055c83c2e5be1 in boost::log::v2_mt_posix::aux::light_rw_mutex::unlock_shared (this=<optimized out>) at /usr/include/boost/log/detail/light_rw_mutex.hpp:115
#9  boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex>::unlock_shared (this=<optimized out>) at /usr/include/boost/log/sources/threading_models.hpp:78
#10 boost::log::v2_mt_posix::aux::shared_lock_guard<boost::log::v2_mt_posix::sources::multi_thread_model<boost::log::v2_mt_posix::aux::light_rw_mutex> >::~shared_lock_guard (this=<optimized out>,    __in_chrg=<optimized out>) at /usr/include/boost/log/detail/locks.hpp:146
#11 boost::log::v2_mt_posix::sources::basic_composite_logger<char,boost::log::v2_mt_posix::sources::severity_logger_mt<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<severity_level> > >::open_record<boost::parameter::aux::tagged_argument<boost::log::v2_mt_posix::keywords::tag::severity,severity_level const> > (this=this@entry=0x55c83e46b798,args=...) at /usr/include/boost/log/sources/basic_logger.hpp:458

我的应用程序在 linux 上运行。在类析构函数中,我有日志打印。核心文件显示那是崩溃点。请问这是配置问题还是boost库使用不当?

解决方法

问题在于,当您的类析构函数被调用时,用于严重性级别的线程本地存储已经被销毁。因此,启动日志记录会因异常而失败,并且由于您没有捕获它,因此程序中止。

在程序终止期间避免记录是recommended。但是,如果您确实需要该日志记录实例,您可以尝试将记录器类型更改为 logger_mt。这将从通过该记录器发出的日志记录中删除严重性级别,但您可以使用 scoped logger attributes 模拟它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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”。这是什么意思?