使用valgrind检查内存泄露
背景
在代码开发过程中,内存泄露问题是一个让人排查起来很头疼的问题,这种bug有时候会非常隐蔽,当代码量很大的时候,有时候直接推理排查会花费大量时间精力,还有可能漏掉,此时可以通过一些小工具来排查代码里的内存泄露问题,linux下,可以通过valgrind工具来检查代码里的内存泄露问题
安装配置valgrind
1.下载
官网下载地址: https://www.valgrind.org/downloads/current.html
2.解压安装
1 | //解压 |
至此,valgrind的安装及环境配置已完成,操作过程如下图:
使用
1.demo如下
main.cpp如下
1 |
|
直接编译即可:
1 | g++ main.cpp |
2. 调试
调试指令如下:
1 | valgrind --log-file=./valgrind_report.log --leak-check=full --show-leak-kinds=all --show-reachable=no --track-origins=yes ./a.out |
–log-file
指定报告输出文件
–track-origins=yes
是否显示未定义的变量,在堆、栈中被定义没有被initialised的变量都被定义成origins。默认是关闭这个option的。
–show-leak-kinds=all
这里可以支持的选项有[definite|possible],一般只需要去关注definite(必须关注),possible是可能会存在。
–leak-check=full
当服务器退出时是否收集输出内存泄漏,选项有[no|summary|full]这个地方我们将其设置成全输出,默认将会使用summary方式。
之后就可以查看生成的报告valgrind_report.log,分析是否有内存泄露,及问题定位
本次代码检查如下:
总结
在linux下排查内存泄露问题时,如果项目复杂,代码量大,可以考虑使用valgrind工具来协助排查