【MLA】一种内存泄漏分析方法
项目地址:skullboyer/MLA (github.com)
介绍
MLA 即 Memory Leak Analyzer,是一个排查内存泄漏的分析器
实现机制是在malloc时记录分配位置信息,在free时记录释放位置信息,通过两者计数作差可得是否存在泄漏
快速开始
你可以使用提供的脚本do.sh
来快速使用本代码库
可以使用
./do.sh help
命令
-*- help -*- usage: ./do.sh [generate] [make] [exec] [clean] [help] [generate]: -g -G generate Example usage of the MLA mechanism $ ./do.sh -g MLA $ ./do.sh make Self-validation of MLA mechanisms $ ./do.sh -g SV $ ./do.sh make LOG mechanism implementation analysis $ ./do.sh -g LOG $ ./do.sh make Execute the program to view the results $ ./do.sh exec Remove unnecessary code $ ./do.sh clean
如何使用
你只需两步就可以开始使用了
1、适配
mla.h
文件中的两个接口malloc
和free
/* MLA内部使用的内存管理接口 */ #define MLA_MALLOC(size) malloc(size) #define MLA_FREE(addr) free(addr) /* 对外提供使用的内存泄漏检查的分配释放接口 */ #define PORT_MALLOC(size) MlaMalloc(size, __FILENAME__, __func__, __LINE__) #define PORT_FREE(addr) MlaFree(addr, __FILENAME__, __func__, __LINE__)
2、在你的代码初始化部分加入接口
MlaInit
,在查看内存泄漏信息的地方调用接口MlaOutput
即可
示例:
通过自证清白来演示MLA的用法
$ ./do.sh -g SV Generate a example version of the MLA file.
执行上述命令后会生成一些文件,这些是MLA
自证的测试文件
$ ./do.sh make $ ./do.sh exec
执行上述命令后会输出MLA
的分析信息,借助Diff
字段可以清晰看出有没有内存泄漏
在MLA Verbose
部分可以看到详细的内存分配和释放信息,包括代码文件名、行数、函数以及分配大小、释放次数等信息
- 不存在内存泄漏
-- SV_MlaOutput: * * ********************************************** Memory Leak Analyzer ********************************************** * * * M L A N O N E *
- 泄露信息概览
-- MlaOutput: * * ********************************************** Memory Leak Analyzer ********************************************** * * Caller Hash Malloc Free Diff sv_mla.c:316 SV_MlaMalloc 52f06d09 3 3 0 sv_mla.c:214 MlaMallocRecorder 1239e656 1 1 0 sv_mla.c:286 MlaFreeRecorder 49583dd0 2 2 0
- 泄露信息细节
*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MLA Verbose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%* >1 Caller Size Malloc Free Diff sv_mla.c:316 SV_MlaMalloc 12 3 3 0 *----------------------------------------------------------------------------------------------------------------* |Verbose: malloc free | | 1. (12)B - [3] sv_mla.c:357 SV_MlaFree - [3] | *----------------------------------------------------------------------------------------------------------------* >2 Caller Size Malloc Free Diff sv_mla.c:214 MlaMallocRecorder 104 1 1 0 *----------------------------------------------------------------------------------------------------------------* |Verbose: malloc free | | 1. (104)B - [1] sv_mla.c:201 MlaDelItem - [1] | *----------------------------------------------------------------------------------------------------------------* >3 Caller Size Malloc Free Diff sv_mla.c:286 MlaFreeRecorder 88 2 2 0 *----------------------------------------------------------------------------------------------------------------* |Verbose: malloc free | | 1. (88)B - [2] sv_mla.c:153 MlaProcessFreeNode - [2] | *----------------------------------------------------------------------------------------------------------------*
共同进步
欢迎大家使用并issue
反馈
再牛逼的梦想也架不住傻逼似的坚持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
2019-01-23 【rt-thread】ENV构建STM32-BSP报错