02.서버-Linux

[리눅스]Core 분석

redkite 2012. 12. 19. 13:32

0037. [리눅스] Core 분석

gcc 등을 이용하여 컴파일 혹은 실행 도중 에러가 발생하는 경우.

(Core dump 는 소스 컴파일시에는 일어나지 않지만 실행시만 에러로 떨어짐.)

컴파일 옵션에 -g 를 넣으면 디버그 정보를 넣어서 컴파일 하여 core 파일 분석.

Segmentation fault -> 파일생성 실패. ulimit을 사용해서 풀어준다. (ulimit -c 1024)

::: Core 파일 분석을 위해 gdb를 실행한다.

~]$ ulimit -c 1024

~]$ gdb 실행파일명 core파일명

어느부분에서 에러가 났는지 확인할 수 있다.

그 외 옵션

(gdb) backtrace
#0 0x08048396 in printString (string=0x0) at main.c:14
#1 0x0804837c in main (argc=1, argv=0x0) at main.c:8

'backtrace' 명령어는 함수를 연대기순으로 나열해 준다. 맨 위에 줄이 segmentation fault
가 발생한 소스이다. 저걸 보면 main.c:8 에서 main.c:14를 호출한 것을 알 수 있다.
더 많은 정보를 얻기 위해 'frame' 명령을 사용하도록 하자. 'frame' 명령은 'backtrace'
명령 실행으로 나온 항목들에 대해 더 많은 정보를 보여준다.


(gdb) frame 0
#0 0x08048396 in printString (string=0x0) at main.c:14
14 sprintf(string, "This is a test.\n");
(gdb) frame 1
#1 0x0804837c in main (argc=1, argv=0x0) at main.c:8
8 printString(argv);

이것을 보면 이미 main.c:8 에서 argv가 0으로 값이 넘어간 것을 알 수 있다.

(gdb) bt

수행한 함수 목록 뷰(스택의 상세보기)

(gdb) [up / down] (스택의 이동 frame 번호 순)