본문 바로가기
Linux/Tips&News

segmentation fault - core dump 파일이 생성되지 않아요?

by 드로니뚜벅이 2023. 7. 11.

리눅스에서 프로그램을 실행하다 보면 "sementation fault 어쩌구저쩌구" 하는 메시지를 출력하고 프로그램이 종료되는 경우가 있습니다.

대부분 메모리 문제로 다음 원인때문에 발생할수있습니다.

  • 보호된 메모리에 접근을 시도하는 경우
  • 읽기 권한이 없는 프로세스가 읽기나 쓰기를 시도하는 경우
  • 할당된 메모리 영역을 벗어나서 접근할 경우 - 할당된 메모리보다 더 많은 데이터를 쓰려고 하는 경우

하지만 이런 문제가 발생할 경우 친절하게도 덤프파일(core)을 생성해 줘서 디버깅을 할 수 있도록 정보를 제공합니다.

그런데, 간혹 덤프 파일이 생성되지 않고 프로그램이 종료되는 경우가 있습니다.

 

다른 원인이 있을 수 있겠습니다만, 현재 시스템 설정을 확인할 필요가 있습니다.

여기서는 "ulimit" 명령어를 사용해서 아래와 같이 확인해 보겠습니다.

$ ulimit -a                  
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         0
-m: resident set size (kbytes)      unlimited
-u: processes                       95709
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  65536
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 95709
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

 

"core file size"가 0이네요. 이것을 변경하려면 "-c" 옵션으로 설정할 수 있습니다.

 

$ ulimit -c unlimited
$ ulimit -a          
-t: cpu time (seconds)              unlimited
-f: file size (blocks)              unlimited
-d: data seg size (kbytes)          unlimited
-s: stack size (kbytes)             8192
-c: core file size (blocks)         unlimited
-m: resident set size (kbytes)      unlimited
-u: processes                       95709
-n: file descriptors                1024
-l: locked-in-memory size (kbytes)  65536
-v: address space (kbytes)          unlimited
-x: file locks                      unlimited
-i: pending signals                 95709
-q: bytes in POSIX msg queues       819200
-e: max nice                        0
-r: max rt priority                 0
-N 15:                              unlimited

 

위 설정을 계속 사용하시려면 시스템 파일을 수정해야 합니다.