mtrace是Linux系统内核自带的一个内存追踪的函数,它会在每个内存申请函数malloc/realloc/calloc的位置记录下信息,并在每个内存释放的位置记录下free的内存信息,其中包含有内存申请的地址,内存申请的大小,释放内存的地址,释放内存的大小。
这其实是一种hook技术,在malloc和free等内存申请释放的调用处,插入自己的一些代码,用来记录内存的信息,包括指针的地址,内存块的大小等。关于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

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

被折叠的 条评论
为什么被折叠?



