valgrind调查内存leak
快有几个月没更新了,记录一下最近解决问题用到的工具吧.
最近代码跑压力测试,总是发现内存在无规律的慢慢增加,因此在Android上用上了大名顶顶的valgrind,说实话,真是名不虚传,
真是建议以后所有c/c++ 项目,不管有没有现象级的问题,用这个跑一下检测下一些隐藏得比较深的问题;
export G_SLICE=always-malloc
export G_DEBUG=gc-friendly
注:Android 4.4中跑valgrind ,把external中编译的valgrind拷贝到
/data/valgrind目录,然后设置环境变量才能使用:
export VALGRIND_LIB=/usbdisk/valgrind
参考命令行:
valgrind -v --tool=memcheck --track-fds=yes --leak-check=full --show-reachable=yes --time-stamp=yes --undef-value-errors=no --malloc-fill=0xc --free-fill=0xd --freelist-vol= --trace-children=yes --num-callers= --suppressions=default.supp --log-file=valgrind_gst ./cmdplayer -p gstreamer http://10.9.44.116/test.mp4
注:
Android 的external目录下有valgrind的源代码,mm 编译后拷贝到板子上就可以使用valgrind了.
1,生成supp文件
supp文件可以定义valgrind的检查过滤规则。如果你确实用过valgrind,你会发现其对内存的检查非常严厉,很容易存在误报(其实也不是误报,有时候那些错误只是你不关注的),尤其是对于libc中的malloc与free(好像还有new和delete,另外这个是个很tricky的地方,按照文档的意思是,libc里面malloc时,会额外分配一点内存用于某些事情来保证malloc的工作,而这些额外的内存不会被free释放掉,因为当线程释放的时候,linux内核会将这些额外的内存给释放了,从而内存检测工具的检查会被影响)以及一些其他的库(比如ACE?)。为了消除这些干扰信息,你需要生成supp文件。最简单的办法就是在启动valgrind的时候加上选项--gen-suppressions=all,再将生成的规则复制出来。当然,这不是一个聪明的办法。最好是将生成的结果整理一下,将多个相似的整理成一条。可以参考官方文档suppressing errors
valgrind调查内存leak的更多相关文章
- 使用valgrind检查内存
Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,是公认的最接近Purify的产品,它包含一个内核——一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务——调试 ...
- Valgrind检测内存泄露简介
原文地址: Valgrind 概述 体系结构 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成.内核 ...
- Valgrind查找内存泄露利器
Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析.你可以在它的环境中运行你的程序来监视内存的使用情况,比如C 语言中的ma ...
- 用valgrind检查内存问题
Valgrind Valgrind作为一个免费且优秀的工具包,平时大部分人可能都是使用valgrind检测内存问题,如内存泄露,越界等. Valgrind工具包包含多个工具,如Memcheck,Cac ...
- 转: 使用valgrind检查内存问题
作者:gfree.wind@gmail.com 博客:blog.focus-linux.net linuxfocus.blog.chinaunix.net 本文的copyleft归gfree ...
- Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题, Core Foundation 类型指针内存泄漏
Analyze 静态分析工具中显示 大量的CF类型指针 内存leak 问题 今天使用Analyze 看了下项目, 解决办法,项目中使用了ARC,OC的指针类型我们完全不考虑release的问题 ...
- Linux 下用 valgrind 查找内存泄漏小例子
1.安装 valgrind yum install valgrind 2.测试用例 main.cpp #include <iostream> using namespace std; st ...
- valgrind massif内存分析[转]
valgrind检查内存泄露 #valgrind ./程序 内存泄漏问题,我们有memcheck工具来检查.很爽.但是有时候memcheck工具查了没泄漏,程序一跑,内存还是狂飙.这又是什么问题. ...
- Glib程序使用Valgrind查找内存泄露
G_DEBUG=gc-friendly G_SLICE=always-malloc //glib有缓存 故需使用 上述两条设置环境变量 G_SLICE和G_DEBUG排除由内存分配机制带来的 ...
随机推荐
- android出现段错误时的查找定位的方法
android出现段错误时的查找方法,例如出现log: - ::): Fatal signal (SIGSEGV) at ), thread (SurfaceFlinger) - ::): *** * ...
- 针对WebLogic Server 12.1.3版本打补丁
先去下载补丁文件,在链接 https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=179118524484876&id= ...
- 刷新神经网络新深度:ImageNet计算机视觉挑战赛微软中国研究员夺冠
微软亚洲研究院首席研究员孙剑 世界上最好计算机视觉系统有多精确?就在美国东部时间12月10日上午9时,ImageNet计算机视觉识别挑战赛结果揭晓——微软亚洲研究院视觉计算组的研究员们凭借深层神经网络 ...
- codeforces round #264(div2)
A题 我仅仅想说题意非常坑,一不小心就会wa,哎,不机智的我居然在最后判题的过程中错了,少加一个推断语句. 错的值了,你说呢? #include<map> #include<cm ...
- Discuz! 6.x/7.x 版本 前台任意代码执行漏洞
一.漏洞原理: 由于php5.3.x版本里php.ini的设置里request_order默认值为GP,导致Discuz! 6.x/7.x 全局变量防御绕过漏洞. include/global.fun ...
- D3.js系列——元素操作和简单画布操作
一.元素操作: 1.选择元素 select 和 selectAll,以及选择集的概念 var p = d3.select("body").select("p") ...
- Servlet执行时一般实现哪几个方法?
public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServ ...
- 阻止 gulp 发生异常后退出
gulp-plumber 可以阻止 gulp 插件发生错误导致进程退出并输出错误日志.
- spock+maven+junitReport接口测试框架
1.POM 文件: <?xml version="1.0" encoding="UTF-8"?><project xmlns="ht ...
- 窥探try ... catch与__try ... __except的区别
VC中的这两个东西肯定谁都用过, 不过它们之间有什么区别, 正好有时间研究了一下, 如果有错误欢迎拍砖.基于VC2005, 32位XP 平台测试通过. 估计对于其他版本的VC和操作系统是不通用的. 1 ...