Valgrind确实是强大的工具http://www.cnblogs.com/nicebear/archive/2012/05/05/2485054.html
来源:互联网 发布:小白鞋推荐 知乎 编辑:程序博客网 时间:2024/05/17 22:29
Valgrind确实是强大的工具
Linux程序内存错误调试中,Valgrind确实是强大的工具。其中Memcheck工具用于查内存越界、内存泄漏,Massif工具用于跟踪程序内各函数的内存使用情况,以及Profiler等一系列工具。
最近维护一个程序,总是跑半小时就崩,每次崩的位置都不一样。经查,是该程序狂吃内存,最终导致内存耗尽。用Memcheck查并没有内存泄漏,于是使用Massif工具跟踪内存使用状况,从输出结果中一目了然地发现了问题的原因:代码中有一个地方在循环地创建线程,却没有及时销毁线程,而是把线程的销毁留给了整个进程的退出部分,怪不得光吃内存,却没有内存泄漏。于是很容易地就将这个问题修正了。
如果Massif报告的内存占用量和top命令显示的内存占用量不一致,就需要加--pages-as-heap=yes参数,这样能底层的跟踪内存,以获得全部内存使用数据。
对内存越界,Memcheck似乎只能检测堆的越界,而不能检测栈的越界。因此,如果你认为程序中有越界错误,但Memcheck没有检测出时,应该是某个数组的size设小了导致的。查看哪个变量的值被不正当改变了,然后用gdb的watch跟踪该变量,通常就可定位到导致越界的代码。
Valgrind还可以和gdb配合使用。用法:
valgrind --vgdb=yes --vgdb-error=0 your_prog
然后在另一个shell中用gdb调试your_prog,然后:
(gdb) target remote | vgdb
此时就可以使用continue命令来执行程序了(vgdb不支持run命令),Valgrind一检测到错误,程序就会在gdb中自动停下来供调试。
本文并不是一篇Valgrind教程。Valgrind的文档在这里:http://valgrind.org/docs/manual/manual.html。这个文档非常好,结合着例子讲解各工具的用法,很好懂。
- Valgrind确实是强大的工具http://www.cnblogs.com/nicebear/archive/2012/05/05/2485054.html
- Linux的inode的理解 http://www.cnblogs.com/itech/archive/2012/05/15/2502284.html
- 分享15款很棒的 JavaScript 开发工具(转http://www.cnblogs.com/lhb25/archive/2011/05/11/2040071.html)
- 有关select的操作http://www.cnblogs.com/dcba1112/archive/2011/05/26/2057551.html
- vector的reserve和resize http://www.cnblogs.com/qlee/archive/2011/05/16/2048026.html
- http://www.cnblogs.com/hnrainll/archive/2012/05/05/2484642.html blue架构
- android boot 代码流程http://www.cnblogs.com/idiottiger/archive/2012/05/23/2513494.html
- 使用activitygroup(原地址:http://www.cnblogs.com/answer1991/archive/2012/05/08/2489844.html)
- http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520477.html
- http://www.cnblogs.com/tornadomeet/archive/2012/05/24/2515980.html
- http://www.cnblogs.com/kevinGao/archive/2012/05/02/2482117.html
- http://www.cnblogs.com/devil-91/archive/2012/05/10/2493611.html
- 函数调用分析 http://www.cnblogs.com/bangerlee/archive/2012/05/22/2508772.html
- http://www.cnblogs.com/bluestorm/archive/2012/05/10/2493592.html
- SQlite 基础 转自:http://www.cnblogs.com/elleniou/archive/2012/05/04/2482041.html
- Android LayoutInflater详解 (转载:http://www.cnblogs.com/top5/archive/2012/05/04/2482328.html)
- http://www.cnblogs.com/smileEvday/archive/2012/06/05/UIColor_CIColor_CGColor.html
- linux下select使用--转载http://www.cnblogs.com/moonvan/archive/2012/05/26/2518881.html
- 根据指定路径以及指定文件后缀名 获取文件名
- 2014年最新前端开发面试题(题目列表+答案 完整版)
- Linux下使用 bind搭建DNS主从服务器
- IPP库简介
- 新的开始,向前辈学习
- Valgrind确实是强大的工具http://www.cnblogs.com/nicebear/archive/2012/05/05/2485054.html
- 批量将txt文件转为csv文件
- 微服务架构在Netflix的应用:架构设计的经验教训
- RQP-DEF-0403错误
- Eclipse 配置代理更新下载SDK
- OC与JavaScript交互学习过程中的资料整理
- MYSQL数据库隔离级别分析
- [bzoj3172][TJOI2013]单词
- Android 强制下线功能