Translate

2015년 4월 15일 수요일

[C] 세그멘테이션 오류 (core dumped) 발생 시 coredump 파일이 생성되지 않는 경우



우분투(Ubuntu) 로 C언어 공부 시
세그멘테이션오류 (core dumped)   [Segmentation fault]
라는 메시지와 함께 프로그램이 종료 시 gdb 를 통해서 디버깅을 하라고 하는데 위와 같이 오류가 발생했음에도 core 파일이 생성되지 않아서 좀 찾아봤다.





해결방법


lucifer@lucifer-Vostro-V13:~/test/C$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30938
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 30938
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
lucifer@lucifer-Vostro-V13:~/test/C$ 
lucifer@lucifer-Vostro-V13:~/test/C$ ulimit -c unlimited
lucifer@lucifer-Vostro-V13:~/test/C$ 
lucifer@lucifer-Vostro-V13:~/test/C$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 30938
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 30938
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
lucifer@lucifer-Vostro-V13:~/test/C$





위와같이 작업 후 프로그램 실행 후
세그멘테이션오류 (core dumped)   [Segmentation fault]
메시지가 발생한다면 기본적으로 프로그램이 있는 디렉토리에 core 파일이 생성된 것을 확인할 수 있다.



위의 설정만으로는 다른 쉘에서는 적용되지 않는다.
컴퓨터 기동 시 모든 쉘에서 위의 설정이 적용되도록 하려면 다음과 같이 작업하면 된다.


$ vi ~/.bashrc


=================================
# 파일내용의 제일 처음이나 제일 마지막에 아래의 문자열을 입력한다.
ulimit -c unlimited







정상적으로 적용이 된다면 다음과 같이 나오게 된다.


lucifer@lucifer-Vostro-V13:~/test/C/testCore$ ls -l
합계 16
-rw-r--r-- 1 lucifer lucifer    13  4월 15 01:33 numbers.dat
-rwxr-xr-x 1 lucifer lucifer 11793  4월 15 01:32 search1
lucifer@lucifer-Vostro-V13:~/test/C/testCore$ 
lucifer@lucifer-Vostro-V13:~/test/C/testCore$ ./search1 
세그멘테이션 오류 (core dumped)
lucifer@lucifer-Vostro-V13:~/test/C/testCore$ 
lucifer@lucifer-Vostro-V13:~/test/C/testCore$ ls -l
합계 404
-rw------- 1 lucifer lucifer 397312  4월 15 01:33 core
-rw-r--r-- 1 lucifer lucifer     13  4월 15 01:33 numbers.dat
-rwxr-xr-x 1 lucifer lucifer  11793  4월 15 01:32 search1
lucifer@lucifer-Vostro-V13:~/test/C/testCore$



댓글 없음 :

댓글 쓰기