1.确保你的系统是支持GNU的头文件<mcheck.h>
#include <mcheck.h>
2. 代码中添加mtrace(), muntrace() 函数
int main(int argc, char* argv[])
{
#ifdef MEMORY_CHECK
mtrace();
#endif
... // other codes
#ifdef MEMORY_CHECK
muntrace();
#endif
}
3. 编译代码
gcc -g xxx.c -o xxx
必须使用 -g 选项,否则不能打开 mtrace()
4. 设置内存跟踪的保存路径,并运行代码
export MALLOC_TRACE=xxx.log
./xxx
5. 分析程序运行时保留的结果
mtrace xxx xxx.log
实例如下
sean@ubuntu:~$ cat test_mcheck.c
#include <mcheck.h>
#include <stdlib.h>
int main(int argc, char* argv[])
{
void * ptr;
mtrace();
ptr = malloc(100);
muntrace();
return 0;
}
sean@ubuntu:~$
sean@ubuntu:~$ gcc -g test_mcheck.c -o test
sean@ubuntu:~$ export MALLOC_TRACE=./test_log
sean@ubuntu:~$ ./test
sean@ubuntu:~$ mtrace test test_log
Memory not freed:
-----------------
Address Size Caller
0x0000000001457460 0x64 at /home/sean/test_mcheck.c:8
sean@ubuntu:~$