valgrind使用说明
注:我会在做项目过程中,逐渐把对valgrint的使用心得加到这里面来。也欢迎大家把使用心得加进来。
注1:最近查看MySQL文档,发现MySQL的内存调试也用到了valgrind。说明valgrint还是不错的。
0、valgrind的下载地址
可以从http://valgrind.org/downloads/current.html下载valgrind 3.2.3 (tar.bz2)
这个tar包里面doc下面有很具体的详细说明(这个项目的文档很全)。
1、什么是valgrind
Valgrind是帮助程序员寻找程序里的bug和改进程序性能的工具。程序通过valgrind运行时,valgrind收集各种有用的信息,
通过这些信息可以找到程序中潜在的bug和性能瓶颈。
Valgrind现在提供多个工具,其中最重要的是Memcheck,Cachegrind,Massif和Callgrind。
2、valgrind的工具介绍
2、1Memcheck:
这个工具可以用来寻找c、c++和fortran程序中内存管理的错误。写c或c++程序时,很多隐藏很深的bug是内存操作上
出了问题。而这些在Memcheck面前都无处遁形。Memcheck可以检查出下列几种内存操作上的错误:
读写已经释放的内存
读写内存块越界(从前或者从后)
使用还未初始化的变量
将无意义的参数传递给系统调用
内存泄漏
2、2Cachegrind:
这个工具可以提供详尽的profiling信息。它不光对指令、内存访问进行计数,更能针对每条指令、每行源代码、每个函数和每个程序
统计cache的不命中次数。大家应该知道,cache对目前系统的性能有决定性的影响。因此这些信息可以指导程序员调整代码,
最大限度的提高程序性能。
2、3Massif:
Massif对内存的分配和释放做profile。程序开发者通过它可以深入了解程序的内存使用行为,从而对内存使用进行优化。
这个功能对C++尤其有用(因为C++有很多隐藏的内存分配和释放)。
3、Memcheck用法简介
3、1 先把要测试的应用程序program用-g 选项编译(去掉其他所有优化选项,避免出现不必要的问题)
3、2 用valgrind 运行你的程序program。
例子:
valgrind --log-file=valReport --leak-check=full --show-reachable=yes --leak-resolution=low --num-callers=4 ./your_program
参数解释:
--log-file=valReport 表示把错误报告写到文件 valReport 里面
--num-callers=4 表示用来区别函数位置的函数调用深度,为40
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/dyoldfish/archive/2007/08/29/1763546.aspx