序言
Valgrind工具组提供了一套调试与分析错误的工具包,是在Linux中检查内存泄漏的工具。当程序编写完之后我一般都会使用它来检查一次内存问题。这些工具之中最有名的是Memcheck,能够识别很多C/C++程序中内存相关的错误。
使用Memcheck输出内存错误信息
- valgrind - -leak-check=yes ./example
- Memcheck是默认的工具,开启 –leak-check 选项会启动内存泄露检查
- 程序运行起来速度比正常运行慢很多(数十倍),并且会使用更多内存
- Memcheck偶尔也会出错,但绝大多数时候都不会出错
- Memcheck不能够侦测所有内存错误,例如不能识别越界读、或者对分配到栈区的数组的越界写入。但是它能够识别导致程序崩溃的大多数错误
- 说明
- 13442是进程号
- probably lost,可能存在内存泄漏
- 在第一行之后紧跟的堆栈轨迹信息告诉你问题出现的位置
- 程序函数 main(main.c:74)表明存在问题的程序位置
使用输出内存错误报告
valgrind - -log-file=./valgrind_report.log - -leak-check=full - -show-leak-kinds=all - -show-reachable=no - -track-origins=yes ./example
- – -log-file
- 指定报告输出文件
- track-origins=yes
- 是否显示未定义的变量,在堆、栈中被定义没有被initialised的变量都被定义成origins。默认是关闭这个option的。
- show-leak-kinds=all
- 这里可以支持的选项有[definite|possible],一般只需要去关注definite,possible是可能会存在。
- leak-check=full
- 当服务器退出时是否收集输出内存泄漏,选项有[no|summary|full]这个地方我们将其设置成全输出,默认将会使用summary方式。
- – -log-file
Acknowledgements:
http://www.cnblogs.com/zhoudayang/p/6110360.html
http://blog.csdn.net/erlang_hell/article/details/51360149
2017.07.07