반응형

프로그램 실행 시 아래 메시지 찍고 동작 안할 때 디버깅 방법 
세그멘테이션 오류 (코어 덤프됨)


l  코어파일 분석하기

 
코어파일은 충돌할 당시 프로세스의 메모리 이미지를 덤프한 것이다. 코어파일을 gdb와 함께 사용하여 프로그램의 상태를 조사하고 실패 원인을 규명할 수 있다. 어떤 예기치 않은 일이 발생하여 비정상적인 종료가 발생할 때 운영체계는 디스크에 코어 파일을 남긴다.메모리에 관한 문제는 Checker 패키지를 사용하여 예방할 수 있다. 하지만 메모리 fault를 일으키는 경우에는 충돌하면서 파일을 덤프한다. 코어파일은 일반적으로 프로세스를 실행시킨 현재 작업 디렉토리에 생성되지만 프로그램 내에서 작업 디렉토리를 바꾸는 경우도 있다.

보통 리눅스는 부팅시에 코어 파일을 만들지 않도록 세팅되어 있다. 코어 파일 생성을 가능케 하려고 한다면 그것을 다시 가능케 하는 셀의 내장 명령을 사용한다.

만약C쉘 호환 쉘(tcsh)을 쓰고 있다면 다음과 같이 명령을 내린다.

%  limit core unlimited

만약 본쉘류( sh , bash , zsh , pdksh )를 사용하고 있다면,

$  ulimit –c unlimited

와 같은 명령을 내린다.

코어파일을 함께 사용하기 위해선 다음과 같이 한다.

% gdb program core

 
참고로 ulimte -a 를 하면 현재 설정값을 볼 수 있다. core file size가 설정전 default값은 '0'이다.

core dump로 저장을 하려면 이 값을 unlimited로 변경해야 저장이 된다.

변경 방법은 아래와 같이 하면되고 변경 후의 값은 ulimit -a로 확인 가능하다. 

ulimit -c unlimited

$ulimit -c 0 $ulimit -c unlimited
$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) 79408
max locked memory       (kbytes, -l) unlimited
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) 95
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 79408
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
$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) 79408
max locked memory       (kbytes, -l) unlimited
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) 95
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 79408
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
$ulimit -c
$0
$ulimit -c
$unlimited

 

반응형

'gdb' 카테고리의 다른 글

[GDB] display array(display *input@i)  (0) 2021.03.29
GDB commands  (0) 2021.03.28
GDB help  (0) 2021.03.28
GDB란 ?  (0) 2021.03.28

+ Recent posts