読者です 読者をやめる 読者になる 読者になる

mtraceを使ってみた

しっくハック: メモリリーク検出:mtrace編
↑を参考に使ってみた

ソース: malloc_test.c

#include<stdio.h>
#include<stdlib.h>
#include<mcheck.h>

int malloc_test()
{
  char *c, *d;
  c = (char *)malloc(100);
  d = (char *)malloc(100);
  free(c);
  return 1;
}

int main()
{
  mtrace();
  malloc_test();
  muntrace();
}


コンパイルからmtrace実行まで

$ pwd
/home/user/mtrace
$ ls
mallc_test.c
$ export MALLOC_TRACE="./mtrace.log"
$ gcc malloc_test.c -g -o a.out
$ ls
a.out  mallc_test.c  mtrace.log
$ mtrace a.out mtrace.log

Memory not freed:
-----------------
   Address     Size     Caller
0x08a563e0     0x64  at /home/user/mtrace/malloc_test.c:9
$ awk 'NR == 9 { print }' malloc_test.c
  d = (char *)malloc(100);


のような感じ、しっかり検出してくれるっぽい。