저자 홈페이지: 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.
댓글 없음:
댓글 쓰기