在我的应用程序中,当我运行作业时,它会完成并且不会在控制台上给出任何消息core dump
。segmentation fault
但是当我进入核心目录时,我可以看到core dump file
它与所执行的工作相关。我试图用 mdb 调试它,我得到的是以下内容。
::stack
0x538548(190c, c1cf0, bffd8, 1800, be6cc, c1b7c)
__SUNW_fini_iostreams+0xc(fe1f15e0, 0, 0, ff, 0, 0)
libCrun.so.1`__1cH__CimplKcplus_fini6F_v_+0x74(4ee1c, 0, fe1ed4c4, 1, bfa70, fe352a00)
libCrun.so.1`_init+0x54(1, 1cc4, fcc35980, fcc37300, fe352a00, 1c00)
libc.so.1`_exithandle+0x40(fcc37580, fcc35980, 1c00, 19f8b4, 19f8b4, 2137cf)
libc.so.1`exit+4(32, ffbddc24, 19f848, bec00, 19f848, 0)
_start+0x110(0, 0, 0, 0, 0, 0)
> ::dem __1cH__CimplKcplus_fini6F_v_+0x74
__1cH__CimplKcplus_fini6F_v_+0x74 == void __Cimpl::cplus_fini
> ::dem __SUNW_fini_iostreams+0xc
__SUNW_fini_iostreams+0xc == __SUNW_fini_iostreams+0xc
当我尝试打印寄存器及其值时,我得到的是:-
美元?无进程 SIGILL:非法指令
%g5 = 0xfe744774 libcap_pdb.so.5`__1cRCAP_PDB_file_pathFcount_ %l5 = 0x00000fdc
%o1 = 0x00000001 %i1 = 0x000c1cf0
cna_adjust`__1cDstdIios_baseEInitJ__initcnt_
%o2 = 0x00038748 %i2 = 0x000bffd8
%o3 = 0x00002c00 %i3 = 0x00001800
%o4 = 0x000c1d58 jobtype`__1cDstdGlocaleU__the_classic_locale_ %i4 = 0x000be6cc
%o5 = 0x0000368c %i5 = 0x000c1b7c
jobtype`__1cDstdQ__stderr_filebuf_+0x3c
%o6 = 0xffbdd978 %i6 = 0xffbdd9d8
%o7 = 0x00055d50 __1cDstdGlocaleNfinal_cleanup6M_v_+0x64 %i7 = 0x0004ee28
__SUNW_fini_iostreams+0xc
%psr = 0xfe001005 impl=0xf ver=0xe icc=nzvc
ec=0 ef=4096 pil=0 s=0 ps=0 et=0 cwp=0x5
%y = 0x00000000
%pc = 0x00538548
%npc = 0x0053854c
%sp = 0xffbdd978
%fp = 0xffbdd9d8
%wim = 0x00000000
%tbr = 0x00000000
> ::dem __1cDstdGlocaleNfinal_cleanup6M_v_+0x64 %i7
__1cDstdGlocaleNfinal_cleanup6M_v_+0x64 == void std::locale::final_cleanup
%i7 == %i7
> ::dem __1cDstdGlocaleU__the_classic_locale_ %i4
__1cDstdGlocaleU__the_classic_locale_ == std::locale::__the_classic_locale
%i4 == %i4
> ::dem __1cFile_pathFcount_ %l5
__1cfile_pathFcount_ == file_path::count
%l5 == %l5
我相信在我的应用程序上运行的作业已经成功完成,并且在清理我的应用程序退出时未在代码中释放的内存时出现错误。这是我根据我std::locale::final_cleanup
从有限资源中读到的内容的假设。我知道任何人几乎不可能准确地指出这里发生了什么,但我想知道我的假设是否根据您的经验正确。此外,我们前段时间对编译器进行了更改,之后我们才面临这个问题。我最近看到了这个问题。也请让我知道的行为 std::locale::final_cleanup
和std::locale::__the_classic_locale
功能