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인 듯 보이네요.
여러분도 저처럼 삽질에 시간쓰지 마시라고 공유합니다. 그럼 이만 포스팅 마칩니다~
'컴퓨터 > 운영체제(주로 리눅스)' 카테고리의 다른 글
[리눅스] 네트워크 등 read,write 시 다 못 쓸때, 읽어 올때 readn, writen 함수 구현 코드 (0) | 2022.07.19 |
---|---|
[리눅스] socket의 상태를 확인 - netstat 명령어 개념과 사용 방법 모음 (1) | 2022.07.17 |
[리눅스] 입출력다중화 - poll 함수의 개념과 사용법 예제 (0) | 2022.07.03 |
[리눅스] systemd 개념과 systemd를 통해서 service 실행하는 방법 (1) | 2022.06.27 |
[리눅스] tar 명령어 사용방법 - 파일 합치기와 압축(gzip, bzip2) (0) | 2022.04.24 |