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

3 篇文章 0 订阅
1 篇文章 0 订阅

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

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

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


// memoryLeakageTest.c
#include <mcheck.h> // 在程序起始处增加头文件 
#include <stdio.h>
#include <stdlib.h>
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




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值