博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
valgrind是个好工具
阅读量:2353 次
发布时间:2019-05-10

本文共 1264 字,大约阅读时间需要 4 分钟。

          编程是碰到最麻烦的问题恐怕就是内存泄露了,内存泄露问题往往不易发现,特别是在内存泄露的大小很小的情况下,如果不是程序长时间运行,恐怕很难发现,而调试内存泄露的问题也常常显得相当困难,最传统的办法恐怕就是一行行地去检查代码了,而对于工程项目,往往涉及到很多人的工作,而且代码量也是相当可观的,要检查内存泄露问题,靠一行行地读代码恐怕是相当头疼的事情(虽然本人也做个这种傻事,囧...ps:后来发现是编写rpc上层调用时,传递的参数是通过malloc产生的,而rpc调用的free函数并不会主动释放在程序中malloc申请的空间,从而导致严重的内存泄露)。ok,看看有什么工具可以帮助我们解决内存泄露的问题吧。

  • valgrind工具

这个工具是开源的,可以下载到安装包,在linux上安装

1.解压bzip2 -d valgrind,x,x,x

2.进入安装目录配置./configure(不要加什么--prefix参数指定安装路径,我指定了以后make出现异常,不指定就ok,当然,也可能是和机器有关,暂时忽略)

3.make&&make install

4.用valgrind -h看看这个工具的参数和用法

        检查内存泄露命令(利用memcheck工具)valgrind --tool=memcheck --leak-check=yes ./test就可以检查test程序的内存泄露问题了。

        使用该命令可以打印出应用程序申请内存和是否内存的情况,应该重点关注definitely lost标注出的函数块,这部分的代码是指申请了内存空间后,指向该部分的内存空间的指针没有free就直接指向其他内存空间或是直接被丢弃了,没有free该指针申请的空间,这类申请最易出现内存泄露情况。

其实valgrind只能提供申请内存异常的函数,具体的分析还是由程序员自己分析,由于它没有具体打印每个指针的申请和释放情况,所以分析起来还是不够方便(找了好久才定位到问题!),不知道是否有工具能够将程序申请的指针malloc和free配对地打印出来,这样更易于分析。

       对于free空间异常的问题,常常令人头疼,在gdb调试环境下,你无法知道一个指针指向的空间到底有多大,是否有其他的变量越界访问了这个空间,如果直接使用free,可能出现段错误,而在gdb下打印你free的指针又是完全正确的,这个时候就可以用valgrind帮你查看内存越界问题了,valgrind会在存在内存越界的block中打印Invalid write of size提示你,你的代码存在内存越界问题,然后,一切就简单多了~~

参考资料:

1.http://blog.csdn.net/bluebeach/article/details/6000413 (介绍definitely lost,indirectly lost等概念)

2.http://www.cnblogs.com/qianxun/archive/2011/04/26/2029353.html (安装和命令说明)

你可能感兴趣的文章
选择排序(分析+代码调优)
查看>>
快速排序(图解分析+代码调优)
查看>>
Java基础面试总结
查看>>
八大基础排序总结
查看>>
Linux下安装使用FastDFS
查看>>
后台管理系统之品牌管理
查看>>
RabbitMQ安装使用及数据同步
查看>>
用户中心
查看>>
授权中心
查看>>
VC++ UDP转TCP互发数据 UDP为服务端 TCP为客户端 可修改IP和端口最小化 2TCP/UDP中转
查看>>
仿养生网 帝国CMS 更新后域名栏目链接一直没变 解决方法:在后台地图--模板标签替换里直接全部替换
查看>>
微信扫码自动群发消息给所有人技术分析 之通过https请求获取微信网页版登录二维码图
查看>>
C#源码刷新网页 最小化托盘http get和post请求配置保存版权时间限制定时调用 单实例运行,如果已经运行则激活窗口到最前显示
查看>>
域名解密 商家联盟会员消费管理系统_连锁店会员积分系统 带微信(域名加密的) aqinxiaodian
查看>>
android蓝牙4.0BLE及2.0 2.1 apk 串口助手带16个自定义按键和自定义指令 字符接收 十六进制或字符发送
查看>>
织梦学习 变量的运用 添加新变量 删除新变量 添加上传视频mp4
查看>>
CocosCreator+VS2017提示“要求的 VS 版本:[2013, 2015, 2017]”解决办法 无法找到 v140_xp 的生成工具
查看>>
助学贷款系统导入预申请时问题解决办法汇总
查看>>
FTP连接阿里云不能获得列表目录等功能,能连接,21端口也打开了。原因FTP是双向的,阿里云入出方向安全组规则必须添加本地随机端口
查看>>
读书程序标准化建模--高效阅读学习,越学越有劲/趣
查看>>