목적:
gdb를 활용해서 바이너리 파일을 실행하는게 번거로울때
segment fault가 발생하면 자동으로 core file이 생성되도록 설정


절차:

1. 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) 31160
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) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited


2. ulimit -c 로 core file size를 설정
얼마나 큰 파일이 생성될지 모르기 때문에 unlimited 으로 설정

#ulimit -c unlimited

3. 바이너리를 실행하다가 segment fault가 발생하면..
core파일이 생성됐는지 확인!
core.xxxx 처럼 뒤에 숫자가 붙어있다.

# ll -t
-rw------- 1 root root 764497920 Jun 20 08:20 core.19018

4. core파일을 gdb로 열어서 확인
실행 해보면 어떤 바이너리를 실행한 core 파일인지 확인 가능
# gdb -c core.19018
GNU gdb (GDB) Fedora (7.0.1-50.fc12)
Copyright (C) 2009 Free Software Foundation, Inc.

... 중략 ...

Core was generated by `test_coredump'.

... 중략 ...
#0  0x0000003a606327f5 in ?? ()
(gdb)

5. 바이너리 파일을 지정 해준 후 core파일을 열어서 디버깅 시작

# gdb -c core.32258 ./test_coredump


6. ulimit -c 로 core file size 원복
계속해서 core 파일을 생성하면 불필요한 하드 공간을 차지하게 되므로..
검증작업이 끝났다면 core file 크기를 원복 시켜주는게 좋습니다. 

#ulimit -c 0

 ※ gdb 활용법은 아래 포스팅을 참고하세요~
http://kthan.tistory.com/6


Posted by KT한
,