2012년 3월 20일 화요일

Core dump file 을 사용한 디버깅


gcc 등을 이용하여 컴파일 혹은 실행 도중 에러가 발생하는 경우.
(Core dump 는 소스 컴파일시에는 일어나지 않지만 실행시만 에러로 떨어짐.)

※컴파일 옵션에 -g 를 넣으면 디버그 정보를 넣어서 컴파일 하여 core 파일 분석.
Segmentation fault -> 파일생성 실패. ulimit을 사용해서 풀어준다. (ulimit -c 1024)

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

~]$ 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 번호 순)

댓글 없음:

댓글 쓰기