このトレースメッセージはどういう意味ですか?

このトレースメッセージはどういう意味ですか?

私のプログラムが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」です。

単なるプログラムではなく、あなたのプログラムなら、デバッガで実行してください。追跡とより有用な情報を得ることができます。

おすすめ記事