内存泄露专题(4)mtrace内存追踪

mtrace是Linux内核的一种内存追踪工具,用于记录malloc和free等内存操作的信息,帮助检测内存泄漏。通过在代码中引入mcheck.h,启用和关闭mtrace,然后设置MALLOC_TRACE环境变量,可以生成内存使用日志。当配合mtrace工具和addr2line解析时,可以定位到具体代码行的内存泄漏。然而,mtrace有限制,如无法跟踪调用栈和mmap分配的内存,且在复杂工程中可能难以定位问题。

mtraceLinux系统内核自带的一个内存追踪的函数,它会在每个内存申请函数malloc/realloc/calloc的位置记录下信息,并在每个内存释放的位置记录下free的内存信息,其中包含有内存申请的地址,内存申请的大小,释放内存的地址,释放内存的大小。

这其实是一种hook技术,在mallocfree等内存申请释放的调用处,插入自己的一些代码,用来记录内存的信息,包括指针的地址,内存块的大小等。关于hook技术,后面还会提到,这里就不深入探究了。

mtrace的使用也很简单,首先我们要包含头文件 mcheck.h, 然后使用mtrace函数开启内存使用记录,你也可以使用muntrace函数取消内存使用记录。这些内存使用记录会记录到MALLOC_TRACE环境变量指向的文件中。

假设我们现在有一段程序如下:

//main.c
#include<string.h>
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>void func1();
void func2();int main() {
   
   
    int i = 0;
    while(i++ < 20) func1();
    return 0;
}void func1() {
   
   
    func2();
}void func2() {
   
   
    char *str;
    str=(char 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值