C/C++内存泄漏检测 —— memleax
memleax是个开源项目,原理是通过注入hook目标进程的malloc(new也是用的malloc)内存分配函数,在指定时间未释放则认为内存泄漏。优点是不需要重启,attach到目标进程。
github地址:http://wubingzheng.github.io/memleax/
ubuntu编译需要安装 libunwind8-dev、libelf-dev 和 libdw-dev 3个库。
测试代码:
#include <iostream>
#include <unistd.h>
#include <fstream> using namespace std; int main()
{
while ()
{
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl; ofstream myfile;
myfile.open ("1.txt"); cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
cout << "Hello world" << endl;
char *p = new char(); usleep( * );
}
}
$ sudo memleax -e == Begin monitoring process ...
CallStack[]: memory expires with bytes, backtrace:
0x00007f07e2a8e4a0 libc-2.21.so __libc_malloc()+ /build/buildd/glibc-2.21/libio/genops.c:
0x00007f07e2a7911d libc-2.21.so ?() /build/buildd/glibc-2.21/libio/iofopen.c:
0x00007f07e3067120 libstdc++.so _ZNSt12__basic_fileIcE4openEPKcSt13_Ios_Openmo()+
0x00007f07e30a918a libstdc++.so _ZNSt13basic_filebufIcSt11char_traitsIcEE4open()+
0x00007f07e30a93e0 libstdc++.so _ZNSt14basic_ofstreamIcSt11char_traitsIcEE4ope()+
0x0000000000400c31 cppleak main()+ /home/kiiim/aosp/memleak_test/.cpp:
CallStack[]: memory expires with bytes, backtrace:
0x00007f07e2a8e4a0 libc-2.21.so __libc_malloc()+ /build/buildd/glibc-2.21/libio/genops.c:
0x00007f07e3049698 libstdc++.so _Znwm()+
0x00007f07e3049749 libstdc++.so _Znam()+
0x00007f07e30a9231 libstdc++.so _ZNSt13basic_filebufIcSt11char_traitsIcEE4open()+
0x00007f07e30a93e0 libstdc++.so _ZNSt14basic_ofstreamIcSt11char_traitsIcEE4ope()+
0x0000000000400c31 cppleak main()+ /home/kiiim/aosp/memleak_test/.cpp:
CallStack[]: memory expires with bytes, backtrace:
0x00007f07e2a8e4a0 libc-2.21.so __libc_malloc()+ /build/buildd/glibc-2.21/libio/genops.c:
0x00007f07e3049698 libstdc++.so _Znwm()+
0x0000000000400cff cppleak main()+ /home/kiiim/aosp/memleak_test/.cpp:
CallStack[]: expired-memory frees after seconds
CallStack[]: expired-memory frees after seconds
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: expired-memory frees after seconds
CallStack[]: expired-memory frees after seconds
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: expired-memory frees after seconds
Warning: too many expired-free at CallStack[]. will not show this CallStack later
CallStack[]: expired-memory frees after seconds
Warning: too many expired-free at CallStack[]. will not show this CallStack later
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, times again
CallStack[]: memory expires with bytes, backtrace:
0x00007f07e2a8e4a0 libc-2.21.so __libc_malloc()+ /build/buildd/glibc-2.21/libio/genops.c:
0x00007f07e3049698 libstdc++.so _Znwm()+
0x0000000000400cff cppleak main()+ /home/kiiim/aosp/memleak_test/.cpp:
标志 char *p = new char(100); 的内存泄漏。
CallStack[2]: memory expires with 8192 bytes, 3 times again
CallStack[2]:expired-memory frees after 3 seconds Warning: too many expired-free at CallStack[2]. will not show this CallStack later
文件句柄因为在while结束时会释放,程序很人性化。屏蔽了这个告警。
C/C++内存泄漏检测 —— memleax的更多相关文章
- C++程序内存泄漏检测方法
一.前言 在Linux平台上有valgrind可以非常方便的帮助我们定位内存泄漏,因为Linux在开发领域的使用场景大多是跑服务器,再加上它的开源属性,相对而言,处理问题容易形成“统一”的标准.而在W ...
- 利用Android Studio、MAT对Android进行内存泄漏检测
利用Android Studio.MAT对Android进行内存泄漏检测 Android开发中难免会遇到各种内存泄漏,如果不及时发现处理,会导致出现内存越用越大,可能会因为内存泄漏导致出现各种奇怪的c ...
- VS2005内存泄漏检测方法[转载]
一.非MFC程序可以用以下方法检测内存泄露: 1. 程序开始包含如下定义: #ifdef _DEBUG #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __ ...
- 【转】简单内存泄漏检测方法 解决 Detected memory leaks! 问题
我的环境是: XP SP2 . VS2003 最近在一个项目中,程序退出后都出现内存泄漏: Detected memory leaks! Dumping objects -> {98500} n ...
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
那么在Windows下有什么好的内存泄漏检测工具呢?微软提供Visual Studio开发工具本身没有什么太好的内存泄漏检测功能,我们可以使用第三方工具Visual Leak Detector(以下简 ...
- _CrtSetBreakAlloc简单内存泄漏检测方法,解决Detected memory leaks!问题
我的环境是: XP SP2 . VS2003 最近在一个项目中,程序退出后都出现内存泄漏: Detected memory leaks! Dumping objects -> {98500} n ...
- Android内存泄漏检测利器:LeakCanary
Android内存泄漏检测利器:LeakCanary MAR 28TH, 2016 是什么? 一言以蔽之:LeakCanary是一个傻瓜化并且可视化的内存泄露分析工具 为什么需要LeakCanary? ...
- Windows平台下的内存泄漏检测
在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...
- C++内存泄漏检测工具
C++内存泄漏检测工具 1.VC自带的CRT:_CrtCheckMemory 调试器和 CRT 调试堆函数 1.1用法: /************************************ ...
随机推荐
- MySQL压力测试(1)-mysqlslap
mysqlslap是从MySQL的5.1.4版开始就开始官方提供的压力测试工具.通过模拟多个并发客户端并发访问MySQL来执行压力测试,同时提供了较详细的SQL执行数据性能报告,并且能很好的对比多个存 ...
- [luogu P2054] [AHOI2005]洗牌
[luogu P2054] [AHOI2005]洗牌 题目描述 为了表彰小联为Samuel星球的探险所做出的贡献,小联被邀请参加Samuel星球近距离载人探险活动. 由于Samuel星球相当遥远,科学 ...
- 使用AJAX报406错误
使用AJAX报406错误,基本有一下两种情况: (1)90%的可能是没有添加jackson包: (2)10%的可能是请求的url后缀是*.html 在springmvc里面,如果请求的是*.html, ...
- puppeteer 爬虫 pdf 截图 自动化
puppeteer简介 puppeteer 翻译是操纵木偶的人,利用这个工具,我们能做一个操纵页面的人.puppeteer是一个nodejs的库,支持调用Chrome的API来操纵Web,相比较Sel ...
- secFox setting
secFox setting 1● load file 2● install 3● use
- rational rose java.lang.classNotFoundException
C:\Windows\Java\TrustLib\RoseDataModeler.zip;C:\Windows\Java\TrustLib\comwrappers.zip;C:\Win ...
- js如何将选中图片文件转换成Base64字符串?
如何将input type="file"选中的文件转换成Base64的字符串呢? 1.首先了解一下为什么要把图片文件转换成Base64的字符串 在常规的web开发过程中,大部分上传 ...
- 关于Object.prototype.toString.call
slice(8,-1)意思是从第8位开始(包含第8位)到最后一位之前(-1的意思就是最后一位,不包含最后一位): Object.prototype.toString.call(boj)这个是用来判断数 ...
- Daily record-June
June201. Dear, wake up! Seven o'clock now, it's time to get up. Wash your face and to have breakfast ...
- svn服务器搭建及使用(二)
上一篇介绍了VisualSVN Server和TortoiseSVN的下载,安装,汉化.这篇介绍一下如何使用VisualSVN Server建立版本库,以及TortoiseSVN的使用. 首先打开Vi ...