追踪malloc/free的使用
创始人
2024-05-30 22:44:02
0

追踪malloc/free的使用

  • 实际项目中,我们可能需要追踪malloc/free的的调用情况,那么应该怎么做呢?
    • 以下是代码
  • 使用

实际项目中,我们可能需要追踪malloc/free的的调用情况,那么应该怎么做呢?

使用一些宏替换,可以轻松地完成任务。

以下是代码

在任意C文件中,加入如下代码

#undef malloc 
#undef realloc
#undef calloc
#undef free
#include "stdlib.h"//防止malloc/free被替换
void *jj01_malloc(unsigned int num_bytes,const char*fun ,int line)
{void * ret = malloc(num_bytes);fprintf(stderr,"[%s,%d]malloc %u %x",fun,line,num_bytes,(long)ret);return ret;
}
void *jj01_realloc(void *mem_address, unsigned int newsize,const char*fun ,int line)
{void * ret = realloc(mem_address,newsize);fprintf(stderr,"[%s,%d]realloc %u %x",fun,line,newsize,(long)ret);return ret;
}
void *jj01_calloc(size_t n, size_t size,const char*fun ,int line)
{void * ret = calloc(n,size);fprintf(stderr,"[%s,%d]calloc %u %x",fun,line,n*size,(long)ret);return ret;
}
void jj01_free(void * ptr,const char*fun ,int line)
{fprintf(stderr,"[%s,%d]free %x",fun,line,(long)ptr);free(ptr);
}

其实就是包装一下malloc/free相关函数,调用的时候打印一下日志。

使用

  1. 可以直接使用jj01_malloc、jj01_free。
  2. 如果没办法进行函数替换则可以考虑如下方法:
    在公共头文件中,添加一下内容
typedef unsigned int size_t;
void *jj01_malloc(unsigned int num_bytes,const char*fun ,int line);
void jj01_free(void * ptr,const char*fun ,int line);
void *jj01_realloc(void *mem_address, unsigned int newsize,const char*fun ,int line);
void *jj01_calloc(size_t n, size_t size,const char*fun ,int line);#include "stdlib.h"
#define malloc(x)  jj01_malloc((x),__FUNCTION__,__LINE__)
#define realloc(a,b)  jj01_realloc((a),(b),__FUNCTION__,__LINE__)
#define calloc(a,b)  jj01_calloc((a),(b),__FUNCTION__,__LINE__)#define free(x)  jj01_free((x),__FUNCTION__,__LINE__)

这样就可以实现自动替换代码中的所有malloc/free

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...