私のアプリケーションでは、ジョブを実行すると、ジョブが完了し、コンソールにメッセージが表示されません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
機能についても教えてください