linux Valgrind使用说明-内存泄漏
Valgrind使用说明
Valgrind manual:
http://valgrind.org/docs/manual/manual.html
Memcheck。这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,我们主要使用即此工具,默认选项。此工具检查下面的程序错误:
· 使用未初始化的内存 (Use of uninitialised memory)
· 使用已经释放了的内存 (Reading/writing memory after it has been free’d)
· 使用超过 malloc分配的内存空间(Reading/writing off the endof malloc’d blocks)
· 对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
· 申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost forever)
· malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
· src和dst的重叠(Overlapping src and dst pointers inmemcpy() and related functions)
可以看出报告的基本格式是:
{问题描述}at {地址、函数名、模块或代码行}by {地址、函数名、代码行}by ...{逐层依次显示调用堆栈}Address 0x???????? {描述地址的相对关系}
- 1
- 2
- 3
- 4
- 5
- 6
而报告的输出文档整体格式则可以总结为:
1. copyright 版权声明2. 异常读写报告2.1 主线程异常读写2.2 线程A异常读写报告2.3 线程B异常读写报告2... 其他线程3. 堆内存泄露报告3.1 堆内存使用情况概述(HEAP SUMMARY)3.2 确信的内存泄露报告(definitely lost)3.3 可疑内存操作报告 (show-reachable=no关闭)3.4 泄露情况概述(LEAK SUMMARY)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
definitely lost:内存没有被释放,且没有任何指针指向这里。肯定泄漏了。报告给出的堆栈是内存被分配时的调用堆栈,它可以基本明确内存是由什么业务逻辑创建的。
still reachable:是说内存没有被释放,尽管如此仍有指针指向,内存仍在使用中,这可以不算泄露。(程序退出时仍在工作的异步系统调用?)
possibly lost:是说可能有泄漏,一般是有二级指针(指针的指针)等复杂情况不易于追踪时出现。
suppressed:统计了使用valgrind的某些参数取消了特定库的某些错误,会被归结到这里
参考网站:
http://www.linuxidc.com/Linux/2012-06/63754.htm
http://elinux.org/Valgrind (wiki)
http://blog.csdn.net/sduliulun/article/details/7732906
http://blog.csdn.net/gatieme/article/details/51959654(比较全面的介绍)
http://www.linuxidc.com/Linux/2012-06/63754.htm (非常详细的介绍了每个工具的使用)
linux Valgrind使用说明-内存泄漏的更多相关文章
- Linux 下用 valgrind 查找内存泄漏小例子
1.安装 valgrind yum install valgrind 2.测试用例 main.cpp #include <iostream> using namespace std; st ...
- Linux C/C++内存泄漏检测工具:Valgrind
Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(C语言中的malloc和free,以及C++中的new和 ...
- 如何在linux下检测内存泄漏
之前的文章应用 Valgrind 发现 Linux 程序的内存问题中介绍了利用Linux系统工具valgrind检测内存泄露的简单用法,本文实现了一个检测内存泄露的工具,包括了原理说明以及实现细节. ...
- Qt creator 搭配 valgrind 检测内存泄漏
继上次重载operator new检测内存泄漏失败之后,妥协了.决定不管是否是准确指明哪一行代码出现内存泄漏,只要告诉我是否有泄漏就行了,这样就没有new替换的问题.在开发中,总是一个个小功能的开发. ...
- 如何在linux下检测内存泄漏(转)
本文转自:http://www.ibm.com/developerworks/cn/linux/l-mleak/ 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨.其中包括 ...
- 使用valgrind进行内存泄漏和非法内存操作检测
valgrind是一个强大的工具,最常用的功能是用它来检测内存泄漏和非法内存的使用.要想让valgrind报告的更加细致,请使用-g进行编译. 基本命令如下: $ valgrind --tool=me ...
- 【转】Linux C动态内存泄漏追踪方法
原文:http://www.cnblogs.com/san-fu-su/p/5737984.html C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借 ...
- valgrind检测内存泄漏
Valgrind 使用 用法:valgrind [options] prog-and-args [options]: 常用选项,适用于所有Valgrind工具 -tool=<name>最常 ...
- valgrind测试程序内存泄漏问题
1.用wincap将valgrind放入系统任意路径下,解压 2. 登录主机后台在需要测试程序的路径下运行此行命令: /opt/valgrind/bin/valgrind ./itb(例) 3. 跑 ...
随机推荐
- Linux删除重复行 排序和不排序的做法--转载
本文部分翻译自这里,来自 Jadu Saikia 的博客,这个博客上有很多非常有用的小技巧,有空可以多看看. 通常如果我们想获取一个文件里不重复的行的时候,我们可以直接通过 sort -u 命令,先把 ...
- hdu 5683 zxa and xor 暴力
zxa and xor Time Limit: 16000/8000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Pro ...
- c++ 判断list是否为空(empty)
#include <list> #include <iostream> using namespace std; int main() { list<int> nu ...
- shell 交互式选择(select)
新建文件 sudo vi test.sh 写入如下内容: #!/bin/bash echo "What is your favourite OS?" select var in & ...
- 动画的使用—Drawable Animation
Drawable Animation可以称为帧动画,因为它是通过每次播放一帧Drawable资源实现的. Drawable Animation算不上真正意义上的动画,因为它的内部实现是通过定时发送消息 ...
- Html之网页分屏浏览
Hi! Every Body!Welcome to my blog! My name is Caiduping,I hope we learn to make progress together! ...
- python学习笔记(日志系统实现)
博主今天在自己的接口自动化框架中添加了日志系统 基于python自带的logging库.包括日志主函数.生成日志文件: # -*- coding: utf-8 -*- # 日志系统 # 时间:2017 ...
- Autofac Mvc注入
private void DependencyInjection() { var builder = new ContainerBuilder(); builder.RegisterControlle ...
- Eclipse 常用快捷键和使用技巧
1.查看快捷键定义的地方 Window->Preferences->General->Keys. 2.更改启动页 在AndroidManifest.xml第一个activity标签项 ...
- myeclipse:web项目不能显示Web App Libraries
项目根路径下.classpath文件,加上 <classpathentry kind="con" path="org.eclipse.jst.j2ee.intern ...