mtrace分析内存泄漏
1. 测试程序
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/time.h> #include <mcheck.h> static void memory_leak_test() { char *p = malloc(4 * 1024); free(p); p = malloc(2 * 1024); p = malloc(1 * 1024); } static int check_leak_start(void) { char log_path[64] = "./log"; setenv("MALLOC_TRACE", log_path, 1); //设置log保存路径 mtrace(); return 0; } static int check_leak_end(void) { char log_path[64] = "./log"; setenv("MALLOC_TRACE", log_path, 1); //设置log保存路径 mtrace(); return 0; } void main() { check_leak_start(); memory_leak_test(); check_leak_end(); }
实验结果:
~/tmp/mtrace_test$ gcc -g mtrace_test.c -o pp ~/tmp/mtrace_test$ ./pp ~/tmp/mtrace_test$ cat log = Start @ ./pp:[0x400678] + 0x1609560 0x1000 @ ./pp:[0x400688] - 0x1609560 @ ./pp:[0x400692] + 0x1609560 0x800 @ ./pp:[0x4006a0] + 0x1609d70 0x400 ~/tmp/mtrace_test$ ~/tmp/mtrace_test$ addr2line -f -e pp 0x400678 memory_leak_test .../tmp/mtrace_test/mtrace_test.c:10 ~/tmp/mtrace_test$ ~/tmp/mtrace_test$ addr2line -f -e pp 0x400688 memory_leak_test .../tmp/mtrace_test/mtrace_test.c:12 //应该是11行的,有点错位 ~/tmp/mtrace_test$ ~/tmp/mtrace_test$ addr2line -f -e pp 0x400692 memory_leak_test .../tmp/mtrace_test/mtrace_test.c:12 ~/tmp/mtrace_test$ ~/tmp/mtrace_test$ addr2line -f -e pp 0x4006a0 memory_leak_test .../tmp/mtrace_test/mtrace_test.c:13
总结
只是打印出申请和释放内存的位置。
参考:https://zhuanlan.zhihu.com/p/83547768
分类:
内存管理
posted on 2021-11-19 16:05 Hello-World3 阅读(105) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2018-11-19 ehci及其伴随ohci主机控制器驱动分析
2017-11-19 1920*1080分辨率和1080p,1080i的关系
2017-11-19 V4L2驱动内核文档翻译(一)