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