赞
踩
Valgrind影响性能且某些程序会报错,同时我们希望跳过初始化阶段,在程序稳定运行之后再去检测内存是否会持续增涨,为了更高效的记录内存分配情况,采用b+树.该程序会拦截malloc,free,calloc,realloc,new,delete。记录lr地址,方便解析脚本定位调用的代码位置.
#include <stdio.h> #include <stdlib.h> int main() { printf("Pree Enter Twice to PreMalloc\n"); getchar(), getchar(); char *p = (char *)calloc(1, 512); free(p); p = (char *)calloc(1, 512); free(p); p = (char *)calloc(1, 512); // free(p); p = (char *)calloc(1, 512); // free(p); p = (char *)calloc(1, 512); free(p); char *buf = new char[1280]; printf("Pree Enter Twice to Test Malloc Free\n"); getchar(), getchar(); printf("TestOver\n"); }
make clean && make
LD_PRELOAD=$PWD/libMemLeakTrackerPreload.so ./malloc_demo
killall -USR2 malloc_demo
killall -USR1 malloc_demo
python3 parser.py /proc/`pidof malloc_demo`/maps memleak.txt
cat mem_leak_report.txt
输出
------------------[INFO]Count:1 Total:1280(Byte)---------------------
/home/MemChecker/malloc_demo main /home/MemChecker/preload_demo.cpp:23
------------------[INFO]Count:1 Total:512(Byte)---------------------
/home/MemChecker/malloc_demo main /home/MemChecker/preload_demo.cpp:14
------------------[INFO]Count:1 Total:512(Byte)---------------------
/home/MemChecker/malloc_demo main /home/MemChecker/preload_demo.cpp:17
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。