mtrace的用法---Linux下内存泄漏检测

mtrace是GNU扩展函数,mtrace为内存分配函数(malloc, realloc, memalign, free)安装hook函数。这些hook函数记录内存的申请和释放的trace信息。

这些trace信息可以用来发现内存泄漏和释放不是申请的内存。

当调用mtrace,mtrace会检查环境变量MALLOC_TRACE。该环境变量应该包含记录trace信息的文件路径。如果文件可以被成功打开,它的大小被截断为0。


// memoryLeakageTest.c
#include  // 在程序起始处增加头文件 
#include 
#include 
int main(void)
{
    setenv("MALLOC_TRACE", "mtrace.out", 1); // 设置环境变量,让trace信息保存在mtrace.out中 
    mtrace(); // 调用函数mtrace()开始监控 
    char *p = (char *)malloc(10); 
    if (p) 
        printf("Memory Allocated successful\n"); 
    else 
        printf("Not Enough Memory\n");
    muntrace();                             // 调用函数muntrace()停止监控
    return 0; 
}

root@ubuntu:/home/xl# g++ -Wall -g memoryLeakageTest.c  -o memoryLeakageTest    // 编译的时候需要加上 -g
root@ubuntu:/home/xl# ./memoryLeakageTest 
Memory Allocated successful
root@ubuntu:/home/xl# mtrace memoryLeakageTest mtrace.out              // 分析trace信息
- 0x0000000001021010 Free 4 was never alloc'd 0x7efdc1e7ce9d
- 0x00000000010210e0 Free 5 was never alloc'd 0x7efdc1f46d2f
- 0x0000000001021100 Free 6 was never alloc'd 0x7efdc1fb664c

Memory not freed:
-----------------
           Address     Size     Caller
0x0000000001021570      0xa  at /home/xl/studyDir/memoryCheckTool/memoryLeakageTest.c:9


参考文档:
https://en.wikipedia.org/wiki/Mtrace

http://blog.csdn.net/gatieme/article/details/51959654

http://elinux.org/Memory_Debuggers

 
  
 
  
 
  
 
 

你可能感兴趣的:(Linux,调试,内存检测)