Boost日志析构函数已中止

时间:2017-02-09 11:39:44

标签: c++ boost boost-log

我使用boost_log开发* nix CLI应用程序。几天前我将main()的所有代码移到了.so库中,之后每次我的应用程序退出时都会崩溃(请看下面)。它并不重要,但看起来很讨厌,所以我很想摆脱它。任何建议将不胜感激。

我尝试过GDB,但没有帮助(下面输出)。

$ myapp > /dev/null
*** glibc detected *** myapp: double free or corruption (!prev):     0x0000000000b71f30 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x75f4e)[0x7f51ffcd8f4e]
/lib64/libc.so.6(+0x78cf0)[0x7f51ffcdbcf0]
myapp(_ZN5boost3log12v2s_mt_posix7sources12basic_loggerIcNS2_15severity_loggerIN8my16logging_severity10value_typeEEENS2_19single_thread_modelEED1Ev+0x1c)[0x42e3a6]
myapp(_ZN5boost3log12v2s_mt_posix7sources21basic_severity_loggerINS2_12basic_loggerIcNS2_15severity_loggerIN8my16logging_severity10value_typeEEENS2_19single_thread_modelEEES8_ED2Ev+0x28)[0x42e3f6]
myapp(_ZN5boost3log12v2s_mt_posix7sources22basic_composite_loggerIcNS2_15severity_loggerIN8my16logging_severity10value_typeEEENS2_19single_thread_modelENS2_8featuresIJNS2_8severityIS7_EEEEEED1Ev+0x18)[0x42e410]
myapp(_ZN5boost3log12v2s_mt_posix7sources15severity_loggerIN8my16logging_severity10value_typeEED2Ev+0x18)[0x42e444]
/lib64/libc.so.6(__cxa_finalize+0x9d)[0x7f51ffc98ebd]
/home/v/lib64/libmy_app.so(+0x104de6)[0x7f5201eedde6]
======= Memory map: ========
00400000-0044c000 r-xp 00000000 fd:00 1046178                            /home/v/bin/myapp
0064b000-0064d000 rw-p 0004b000 fd:00 1046178                            /home/v/bin/myapp
00b59000-00b7a000 rw-p 00000000 00:00 0                                  [heap]
7f51f8000000-7f51f8021000 rw-p 00000000 00:00 0
7f51f8021000-7f51fc000000 ---p 00000000 00:00 0
7f51ffa4d000-7f51ffa63000 r-xp 00000000 fd:00 1566722                    /lib64/libgcc_s-4.4.7-20120601.so.1
7f51ffa63000-7f51ffc62000 ---p 00016000 fd:00 1566722                    /lib64/libgcc_s-4.4.7-20120601.so.1
7f51ffc62000-7f51ffc63000 rw-p 00015000 fd:00 1566722                    /lib64/libgcc_s-4.4.7-20120601.so.1
7f51ffc63000-7f51ffded000 r-xp 00000000 fd:00 1566736                    /lib64/libc-2.12.so
7f51ffded000-7f51fffed000 ---p 0018a000 fd:00 1566736                    /lib64/libc-2.12.so
7f51fffed000-7f51ffff1000 r--p 0018a000 fd:00 1566736                    /lib64/libc-2.12.so
7f51ffff1000-7f51ffff2000 rw-p 0018e000 fd:00 1566736                    /lib64/libc-2.12.so
7f51ffff2000-7f51ffff7000 rw-p 00000000 00:00 0
7f51ffff7000-7f520007a000 r-xp 00000000 fd:00 1566744                    /lib64/libm-2.12.so
7f520007a000-7f5200279000 ---p 00083000 fd:00 1566744                    /lib64/libm-2.12.so
7f5200279000-7f520027a000 r--p 00082000 fd:00 1566744                    /lib64/libm-2.12.so
7f520027a000-7f520027b000 rw-p 00083000 fd:00 1566744                    /lib64/libm-2.12.so
7f520027b000-7f5200282000 r-xp 00000000 fd:00 1566764                    /lib64/librt-2.12.so
7f5200282000-7f5200481000 ---p 00007000 fd:00 1566764                    /lib64/librt-2.12.so
7f5200481000-7f5200482000 r--p 00006000 fd:00 1566764                    /lib64/librt-2.12.so
7f5200482000-7f5200483000 rw-p 00007000 fd:00 1566764                    /lib64/librt-2.12.so
7f5200483000-7f520049a000 r-xp 00000000 fd:00 1566760                    /lib64/libpthread-2.12.so
7f520049a000-7f520069a000 ---p 00017000 fd:00 1566760                    /lib64/libpthread-2.12.so
7f520069a000-7f520069b000 r--p 00017000 fd:00 1566760                    /lib64/libpthread-2.12.so
7f520069b000-7f520069c000 rw-p 00018000 fd:00 1566760                    /lib64/libpthread-2.12.so
7f520069c000-7f52006a0000 rw-p 00000000 00:00 0
7f52006a0000-7f52006b0000 r-xp 00000000 fd:00 1566800                    /lib64/libbz2.so.1.0.4
7f52006b0000-7f52008af000 ---p 00010000 fd:00 1566800                    /lib64/libbz2.so.1.0.4
7f52008af000-7f52008b1000 rw-p 0000f000 fd:00 1566800                    /lib64/libbz2.so.1.0.4
7f52008b1000-7f5201b22000 r-xp 00000000 fd:00 1045440                    /home/v/lib64/libmy_common.so
7f5201b22000-7f5201d21000 ---p 01271000 fd:00 1045440                    /home/v/lib64/libmy_common.so
7f5201d21000-7f5201dd1000 rw-p 01270000 fd:00 1045440                    /home/v/lib64/libmy_common.so
7f5201dd1000-7f5201de9000 rw-p 00000000 00:00 0
7f5201de9000-7f5201faa000 r-xp 00000000 fd:00 1046177                    /home/v/lib64/libmy_app.so
7f5201faa000-7f52021aa000 ---p 001c1000 fd:00 1046177                    /home/v/lib64/libmy_app.so
7f52021aa000-7f52021b8000 rw-p 001c1000 fd:00 1046177                    /home/v/lib64/libmy_app.so
7f52021b8000-7f52021d8000 r-xp 00000000 fd:00 1569635                    /lib64/ld-2.12.so
7f52023bc000-7f52023cf000 rw-p 00000000 00:00 0
7f52023d4000-7f52023d7000 rw-p 00000000 00:00 0
7f52023d7000-7f52023d8000 r--p 0001f000 fd:00 1569635                    /lib64/ld-2.12.so
7f52023d8000-7f52023d9000 rw-p 00020000 fd:00 1569635                    /lib64/ld-2.12.so
7f52023d9000-7f52023da000 rw-p 00000000 00:00 0
7ffd9a0eb000-7ffd9a100000 rw-p 00000000 00:00 0                          [stack]
7ffd9a165000-7ffd9a166000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
Aborted
✗ 1

GDB输出:

$ gdb -x ~/gdb.myapp.gdb myapp
GNU gdb (GDB) 7.10
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-unknown-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from myapp...done.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Dump file(s) must be specified in read mode

*** glibc detected *** /home/v/bin/myapp: double free or corruption (!prev): 0x0000000000665f30 ***
======= Backtrace: =========
/lib64/libc.so.6(+0x75f4e)[0x7ffff58fdf4e]
/lib64/libc.so.6(+0x78cf0)[0x7ffff5900cf0]
/home/v/bin/myapp(_ZN5boost3log12v2s_mt_posix7sources12basic_loggerIcNS2_15severity_loggerIN8my16logging_severity10value_typeEEENS2_19single_thread_modelEED1Ev+0x1c)[0x42e3a6]
/home/v/bin/myapp(_ZN5boost3log12v2s_mt_posix7sources21basic_severity_loggerINS2_12basic_loggerIcNS2_15severity_loggerIN8my16logging_severity10value_typeEEENS2_19single_thread_modelEEES8_ED2Ev+0x28)[0x42e3f6]
/home/v/bin/myapp(_ZN5boost3log12v2s_mt_posix7sources22basic_composite_loggerIcNS2_15severity_loggerIN8my16logging_severity10value_typeEEENS2_19single_thread_modelENS2_8featuresIJNS2_8severityIS7_EEEEEED1Ev+0x18)[0x42e410]
/home/v/bin/myapp(_ZN5boost3log12v2s_mt_posix7sources15severity_loggerIN8my16logging_severity10value_typeEED2Ev+0x18)[0x42e444]
/lib64/libc.so.6(__cxa_finalize+0x9d)[0x7ffff58bdebd]
/home/v/_/lib64/libmy_app.so(+0x104de6)[0x7ffff7b12de6]
======= Memory map: ========
00400000-0044c000 r-xp 00000000 fd:00 1046178                            /home/v/bin/myapp
0064b000-0064d000 rw-p 0004b000 fd:00 1046178                            /home/v/bin/myapp
0064d000-0066e000 rw-p 00000000 00:00 0                                  [heap]
7ffff0000000-7ffff0021000 rw-p 00000000 00:00 0
7ffff0021000-7ffff4000000 ---p 00000000 00:00 0
7ffff5672000-7ffff5688000 r-xp 00000000 fd:00 1312927                    /work/lib64/libgcc_s.so.1
7ffff5688000-7ffff5887000 ---p 00016000 fd:00 1312927                    /work/lib64/libgcc_s.so.1
7ffff5887000-7ffff5888000 rw-p 00015000 fd:00 1312927                    /work/lib64/libgcc_s.so.1
7ffff5888000-7ffff5a12000 r-xp 00000000 fd:00 1566736                    /lib64/libc-2.12.so
7ffff5a12000-7ffff5c12000 ---p 0018a000 fd:00 1566736                    /lib64/libc-2.12.so
7ffff5c12000-7ffff5c16000 r--p 0018a000 fd:00 1566736                    /lib64/libc-2.12.so
7ffff5c16000-7ffff5c17000 rw-p 0018e000 fd:00 1566736                    /lib64/libc-2.12.so
7ffff5c17000-7ffff5c1c000 rw-p 00000000 00:00 0
7ffff5c1c000-7ffff5c9f000 r-xp 00000000 fd:00 1566744                    /lib64/libm-2.12.so
7ffff5c9f000-7ffff5e9e000 ---p 00083000 fd:00 1566744                    /lib64/libm-2.12.so
7ffff5e9e000-7ffff5e9f000 r--p 00082000 fd:00 1566744                    /lib64/libm-2.12.so
7ffff5e9f000-7ffff5ea0000 rw-p 00083000 fd:00 1566744                    /lib64/libm-2.12.so
7ffff5ea0000-7ffff5ea7000 r-xp 00000000 fd:00 1566764                    /lib64/librt-2.12.so
7ffff5ea7000-7ffff60a6000 ---p 00007000 fd:00 1566764                    /lib64/librt-2.12.so
7ffff60a6000-7ffff60a7000 r--p 00006000 fd:00 1566764                    /lib64/librt-2.12.so
7ffff60a7000-7ffff60a8000 rw-p 00007000 fd:00 1566764                    /lib64/librt-2.12.so
7ffff60a8000-7ffff60bf000 r-xp 00000000 fd:00 1566760                    /lib64/libpthread-2.12.so
7ffff60bf000-7ffff62bf000 ---p 00017000 fd:00 1566760                    /lib64/libpthread-2.12.so
7ffff62bf000-7ffff62c0000 r--p 00017000 fd:00 1566760                    /lib64/libpthread-2.12.so
7ffff62c0000-7ffff62c1000 rw-p 00018000 fd:00 1566760                    /lib64/libpthread-2.12.so
7ffff62c1000-7ffff62c5000 rw-p 00000000 00:00 0
7ffff62c5000-7ffff62d5000 r-xp 00000000 fd:00 1566800                    /lib64/libbz2.so.1.0.4
7ffff62d5000-7ffff64d4000 ---p 00010000 fd:00 1566800                    /lib64/libbz2.so.1.0.4
7ffff64d4000-7ffff64d6000 rw-p 0000f000 fd:00 1566800                    /lib64/libbz2.so.1.0.4
7ffff64d6000-7ffff7747000 r-xp 00000000 fd:00 1045440                    /home/v/lib64/libmy_common.so
7ffff7747000-7ffff7946000 ---p 01271000 fd:00 1045440                    /home/v/lib64/libmy_common.so
7ffff7946000-7ffff79f6000 rw-p 01270000 fd:00 1045440                    /home/v/lib64/libmy_common.so
7ffff79f6000-7ffff7a0e000 rw-p 00000000 00:00 0
7ffff7a0e000-7ffff7bcf000 r-xp 00000000 fd:00 1046177                    /home/v/lib64/libmy_app.so
7ffff7bcf000-7ffff7dcf000 ---p 001c1000 fd:00 1046177                    /home/v/lib64/libmy_app.so
7ffff7dcf000-7ffff7ddd000 rw-p 001c1000 fd:00 1046177                    /home/v/lib64/libmy_app.so
7ffff7ddd000-7ffff7dfd000 r-xp 00000000 fd:00 1569635                    /lib64/ld-2.12.so
7ffff7fe0000-7ffff7ff3000 rw-p 00000000 00:00 0
7ffff7ff8000-7ffff7ffb000 rw-p 00000000 00:00 0
7ffff7ffb000-7ffff7ffc000 r-xp 00000000 00:00 0                          [vdso]
7ffff7ffc000-7ffff7ffd000 r--p 0001f000 fd:00 1569635                    /lib64/ld-2.12.so
7ffff7ffd000-7ffff7ffe000 rw-p 00020000 fd:00 1569635                    /lib64/ld-2.12.so
7ffff7ffe000-7ffff7fff000 rw-p 00000000 00:00 0
7ffffffea000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

Program received signal SIGABRT, Aborted.
0x00007ffff58ba625 in raise () from /lib64/libc.so.6
(gdb) bt
#0  0x00007ffff58ba625 in raise () from /lib64/libc.so.6
#1  0x00007ffff58bbe05 in abort () from /lib64/libc.so.6
#2  0x00007ffff58f8537 in __libc_message () from /lib64/libc.so.6
#3  0x00007ffff58fdf4e in malloc_printerr () from /lib64/libc.so.6
#4  0x00007ffff5900cf0 in _int_free () from /lib64/libc.so.6
#5  0x000000000042e3a6 in boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<my::logging_severity::value_type>, boost::log::v2s_mt_posix::sources::single_thread_model>::~basic_logger (this=0x64ca20 <xlog_logger>, __in_chrg=<optimized out>)
    at /work/include/boost/log/sources/basic_logger.hpp:79
#6  0x000000000042e3f6 in boost::log::v2s_mt_posix::sources::basic_severity_logger<boost::log::v2s_mt_posix::sources::basic_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<my::logging_severity::value_type>, boost::log::v2s_mt_posix::sources::single_thread_model>, my::logging_severity::value_type>::~basic_severity_logger (this=0x64ca20 <xlog_logger>,
    __in_chrg=<optimized out>)
    at /work/include/boost/log/sources/severity_feature.hpp:145
#7  0x000000000042e410 in boost::log::v2s_mt_posix::sources::basic_composite_logger<char, boost::log::v2s_mt_posix::sources::severity_logger<my::logging_severity::value_type>, boost::log::v2s_mt_posix::sources::single_thread_model, boost::log::v2s_mt_posix::sources::features<boost::log::v2s_mt_posix::sources::severity<my::logging_severity::value_type> > >::~basic_composite_logger (
    this=0x64ca20 <xlog_logger>, __in_chrg=<optimized out>)
    at /work/include/boost/log/sources/basic_logger.hpp:506
#8  0x000000000042e444 in boost::log::v2s_mt_posix::sources::severity_logger<my::logging_severity::value_type>::~severity_logger (
    this=0x64ca20 <xlog_logger>, __in_chrg=<optimized out>)
    at /work/include/boost/log/sources/severity_logger.hpp:45
#9  0x00007ffff58bdebd in __cxa_finalize () from /lib64/libc.so.6
#10 0x00007ffff7b12de6 in __do_global_dtors_aux ()
   from /home/v/_/lib64/libmy_app.so
#11 0x000000000000000a in ?? ()
#12 0x0000000000000000 in ?? ()
(gdb) f 0
#0  0x00007ffff58ba625 in raise () from /lib64/libc.so.6
(gdb) f 10
#10 0x00007ffff7b12de6 in __do_global_dtors_aux ()
   from /home/v/_/lib64/libmy_app.so

1 个答案:

答案 0 :(得分:1)

您正在查看Static Initialization Order Fiasco.

尽管有名称,但它也适用于破坏全局对象的顺序。由于订单可能在库对象文件的重组中发生了变化,因此很可能最终会破坏后使用。

查找析构函数内的日志记录。避免使用全局/名称空间范围静态。

  

尽管如此,我不认为升级日志中存在未知的双重免费问题,我认为这与我如何使用它有关。

确实