2009년 10월 7일 수요일

Linux Kernel debugging tip

리눅스 debugging 방법은 크게 비파괴 방식과 파괴 방식으로 나눌수 있다.
비파괴 방식이란 코드 수정없이 debugging하는 것을 말하는데, strace,ltrace등이 있으며, 파괴식 방식이란 코드 수정을 하여 debugging하는 방식이 있는데, 대표로 printk등이 있다.

1. 비파괴 방식
1. strace
- 실행 방식 : strace 실행파일 이름 예) strace ls
- 역할 : progam 수행시 행해지는 system call들을 display하여, 어떤 일들이 내부에서 일어나는지를 알수 있게 한다.
2. ltrace
- 실행 방식 : ltrace 실행 파일 이름 예) ltrace ls
- 역할 : dynamic linker library에 들어있는 function들만 호출이 가능하다. ojbect file내부에 들어있는 function들 호출은 추적하지 못한다.

2. 파괴 방식
  1. 1. rmalloc
  • 역할 : malloc,calloc,realloc,free, strdup function등을 감싸는 macro이며, 동적 메모리 할당 이전과 이후에 특별한 문자열로 표시하며, 문제가 발생하면 file name과 line number출력하고 종료한다.
  • 실행 방식 : package(rmalloc.tgz) 다운로드
    rmalloc.c를 -c 옵션과 함께 컴파일
    debugging원하는 code에 #define MALLOC_DEBUG추가, #include "rmalloc.h"추가, link시 rmalloc.o

2. MEMWATCH
  • 역할 : rmalloc과 동일하다.
  • 실행 방법 : memwatch를 다운받고 설치
    #include "memwatch.h" 추가
    gcc -DMEMWATCH -DMW_STDIO 하여 compile
    프로그램 수행하게 되면 memwatch.log와 같은 파일 생헝하게 된다.
3. 이밖에도 Electric Fence, YAMD등이 있는데, 이들은 application에는 적합할수 있으나, kernel debugging에는 적합하지 않는 것으로 보인다.