이 추적 메시지는 무엇을 의미합니까?

이 추적 메시지는 무엇을 의미합니까?

내 프로그램이 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 출력에서 ​​프로그램이 file 을 검색하고 있음을 알 수 있지만 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"입니다.

단순한 프로그램이 아니라 여러분의 프로그램이라면 디버거에서 실행하세요. 추적과 더 유용한 정보를 얻을 수 있습니다.

관련 정보