[리눅스] Coredump 파일이 보이지 않을때 해결하는 두가지 방법
segmentation fault (core dumped)
이런 무시무시한 문구가 떴는데, 눈을 씻고 찾아봐도 coredump 파일을 찾을 수가 없었습니다. 분명 메시지는 coredump 파일 생성됐다고 써있는데 말이죠... 내눈이 잘못된건가, 아니면 내가 영어를 못하는건가..
그래서 제가 찾은 coredump를 찾는 몇가지 해결 방법을 알려드리도록 할게요.
1. ulimit으로 core dump size를 확인
아래와 같은 명령어로 core file size를 확인합니다.
# ulimit -a
0 이상이어야합니다. 그러니까 이 부분을 고쳐하겠죠. 0보다 크면 되긴하지만, unlimited로 바꿔보도록 합시다.
# ulimit -c unlimited
위처럼 unlimited로 바뀐것을 알 수 있습니다. 이제 프로그램을 실행시키면 coredump 파일이 생성될 수도 있습니다. 물론 저처럼 두번째 문제가 있을때는 coredump 파일이 생성되지 않을 수도 있으니, 2번까지 확인해보세요.
한가지 더, ulimit으로 설정한 core dump size는 일시적입니다. 즉, reboot은 당연하고 세션이 끊어지면 초기화된다는 것이죠. 터미널 접속시 바로 설정되도록 적용하려면 아래와 같이 /etc/security/limites.conf 파일을 설정하시면 됩니다.
# vi /etc/security/limits.conf
맨 아래에 아래와 같이 추가하여 저장하시면 반영구적으로 적용됩니다.
2. /proc/sys/kernel/core_pattern 편집하여 현재 디렉토리에 coredump 생성
원래 coredump 파일을 프로그램 실행 위치에 생성되는 것으로 알고 있는데, 저의 경우에는 그게 아니었습니다. 도대체 왜 나만 안되는거야 이러고 있을 때 google 형님께 여쭈어본 결과 /proc/sys/kernel/core_pattern에서 설정할수 있다고 하십니다. 이 파일이 coredump 파일을 어떻게 생성하는지 정의하고 있는데, 열어보면 어떤 이상한 경로로 되어있을 가능성이 있습니다. 저는 과감하게 바꿔줬습니다.
# echo "core.%e.%p" > /proc/sys/kernel/core_pattern
%e와 %p는 format문자로 저도 모릅니다. google형님이 알려준대로 썼으니까요. 이제 바꿔주고 coredump되는 실행파일을 실행시켜주면 그 디렉토리에 coredump 파일이 뜨게 됩니다.
core 덤프 파일이름을 보면 %e는 프로그램 이름, %p는 pid인 듯 보이네요.
여러분도 저처럼 삽질에 시간쓰지 마시라고 공유합니다. 그럼 이만 포스팅 마칩니다~