금요일, 12월 09, 2005

메모리 리크 체크 유틸리티 (ccmalloc) 사용법

메모리 리크 체크 유틸리티 (ccmalloc) 사용법

저자 홈페이지: http://www.inf.ethz.ch/personal/biere
CCMALLOC 홈페이지: http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/

1. ccmalloc이란... (works only with g++/gcc, partly with Solaris cc)

C/C++의 메모리 리크(leak)를 체크해 주는 오픈소스 유틸리티이다. 기존의 상업용으로 나오는 Purify 같은 제품에 비해서, 일부 기능이 부족한 점도 있지만, 공짜로 쓸 수 있는 메모리 리크(leak) 체크 프로그램으로는 단연 최우수라고 할 수 있다.

ccmalloc의 가장 큰 장점은 그 사용의 단순성에 있다. 소스코드를 "전혀 고치지" 않고 단지 ccmalloc 라이브러리를 링크만 해 주면 된다.

2. ccmalloc 다운로드

http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/ccmalloc-0.3.9.tar.gz http://www.inf.ethz.ch/personal/biere/projects/ccmalloc/ccmalloc-0.4.0.tar.gz


3. ccmalloc 설치

tar.gz 을 풀고, ./ccmalloc-0.4.0/src 디렉토리에서,

#솔라리스 경우만 및에 config.h를 include 하는 코드를 추가한다.
$vi ccmalloc.cc
#include "ccmalloc.h"
#include

#include "config.h" <-- 추가


configure / make 명령어를 쓰면,

~/ccmalloc-0.4.0/lib 디렉토리에 libccmalloc.a 가 생긴다.
~/ccmalloc-0.4.0/obj 디렉토리에 ccmalloc-g++.o 가 생긴다.
~/ccmalloc-0.4.0/obj 디렉토리에 ccmalloc-gcc.o 가 생긴다.

주의:

최초에 생성된 libccmalloc.a 파일에는 ccmalloc-g++.o 가 추가되어 있지 않으므로, ~/ccmalloc-0.4.0 디렉토리에서 다음 명령어를 써서 ccmalloc-g++.o 가 추가되도록 한다.

% ar rc lib/libccmalloc.a obj/ccmalloc-g++.o
% ar rc lib/libccmalloc.a obj/ccmalloc-gcc.o

결과적으로 ~/ccmalloc-0.4.0/lib/libccmalloc.a 가 우리가 원하는 최종 라이브러리이다.

만약 여러 프로젝트에서 쓸 것 같으면, libccmalloc.a 파일만 원하는 라이브러리 디렉토리 (예: /usr/local/lib) 에 복사해 두고 그것을 쓰면 된다.

4. ccmalloc을 사용한 컴파일

만약 내 프로그램이 test.c++ 라고 가정하면 다음과 같이 링크 옵션을 준다.

% g++ -g test.c++ -o test.exe -L./ccmalloc-0.4.0/lib -lccmalloc -ldl

(여기서 -g 옵션은 test.c++ 의 디버깅 정보를 넣기 위함이다. -ldl 이 필요한 경우도 있음. )

또는 Makefile 속에

LIB_CCMALLOC = -L./ccmalloc-0.4.0/lib -lccmalloc -ldl

를 추가한다.

5. ccmalloc 이 링크된 프로그램의 실행

우선 ./ccmalloc-0.4.0/ccmalloc.cfg 파일을 실행프로그램이 있는 디렉토리에 .ccmalloc 파일로 복사해 둔다.

% cp ./ccmalloc-0.4.0/ccmalloc.cfg .ccmalloc

복사된 .ccmalloc 파일에 다양한 옵션을 바꿀 수 있다. (우선은 아무것도 고치지 않고 돌려도 무방하다.)

그냥 보통 프로그램 실행시키는 것과 동일한 방식으로 실행시키면 된다. 실행시키면, 로그파일을 생성하지 않도록 했으면, 화면에 STDERR로 현재 설정된 옵션이 보이고, 프로그램이 끝나면, free/delete/release 가 되지 않은 메모리가 정확히 어느 위치에서 malloc/new 되었는지를 스택 트레이스 형태로 보여 준다.

.ccmalloc 파일 중에, %log FILE 옵션을 log ccmalloc.log 라고 바꿔주면, 프로그램 실행이 끝난 후에 ccmalloc.log 파일 속에 결과가 쌓인다.

6. 데몬 형태의 프로그램에 대한 메모리 리크 디버깅

ccmalloc은 프로그램이 종료될 때 로그를 생성하므로, 데몬 프로그램 일정횟수 이상 동작한 후 자동으로 종료되도록 코드를 일부 수정해서 처리할 필요가 있다.

7. Enjoy you life. Ccmalloc frees you up out of terrible C/C++ memories.

댓글 없음: