[리눅스]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 번호 순)
'02.서버-Linux' 카테고리의 다른 글
[리눅스]아파치 번역 (0) | 2012.12.19 |
---|---|
[리눅스]하드디스크 점검 (0) | 2012.12.19 |
[리눅스]요약 정리 (0) | 2012.12.19 |
[리눅스]본딩 작업 (0) | 2012.12.19 |
[리눅스]메일서버 장애 대처 (0) | 2012.12.19 |