私のプログラムがUbuntu 18.04でしばらく実行された後にクラッシュしました。最後の数行はstrace
次のとおりです。
6260 openat(AT_FDCWD, "/usr/share/locale/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale-langpack/en_US/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale-langpack/en.UTF-8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale-langpack/en.utf8/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 openat(AT_FDCWD, "/usr/share/locale-langpack/en/LC_MESSAGES/libc.mo", O_RDONLY) = -1 ENOENT (No such file or directory)
6260 write(2, "terminate called after throwing "..., 48) = 48
6260 write(2, "std::system_error", 17) = 17
6260 write(2, "'\n", 2) = 2
6260 write(2, " what(): ", 11) = 11
6260 write(2, "Unknown error -1", 16) = 16
6260 write(2, "\n", 1) = 1
6260 rt_sigprocmask(SIG_UNBLOCK, [ABRT], NULL, 8) = 0
6260 rt_sigprocmask(SIG_BLOCK, ~[RTMIN RT_1], [], 8) = 0
6260 getpid() = 6260
6260 gettid() = 6260
6260 tgkill(6260, 6260, SIGABRT) = 0
6260 rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
6260 --- SIGABRT {si_signo=SIGABRT, si_code=SI_TKILL, si_pid=6260, si_uid=1000} ---
6260 +++ killed by SIGABRT (core dumped) +++
上記のメッセージの私の理解はlibc.mo
見つからないということです。私の理解は正しいですか?では、どうすれば解決できますか?そうでない場合、誰かがクラッシュの原因を検出する方法についてのアドバイスを提供できますか?
ベストアンサー1
strace出力からプログラムがファイルを検索していることがわかりますが、libc.mo
ここではこれは問題ではありません。ファイル.mo
には翻訳が含まれていて、見つからない場合、メッセージは通常英語で表示されます。パス名を見るとロケールがあるようですen_US
ので、翻訳は必要ありません。
この問題のヒントは次のとおりです。
6260 write(2, "terminate called after throwing "..., 48) = 48
6260 write(2, "Unknown error -1", 16) = 16
「投げ」(またはそれ以上)後に切り捨てられたメッセージを表示するには、より大きなサイズを使用してください-s 50
。例外クラス名を含めることができます。もう一つのヒントは、一般的に役に立たない「不明なエラー-1」です。
単なるプログラムではなく、あなたのプログラムなら、デバッガで実行してください。追跡とより有用な情報を得ることができます。