概述
任何长期运行的应用程序都必须正确地管理内存,否则它最终会耗尽所有可用内存并崩溃,如果你使用的是自动为你管理内存的语言,那么祝贺你,如果你用C/C++则需要你负责内存管理,这里有一个valgrind的简短教程,这个工具将对你的程序的任何内存泄漏出具报告。
Valgrind是用于构建动态分析工具的仪器框架。有Valgrind工具可以自动检测许多内存管理和线程错误,并详细描述程序。您也可以使用Valgrind构建新工具。
Valgrind发行版当前包括六个生产质量工具:一个内存错误检测器,两个线程错误检测器,一个缓存和分支预测探查器,一个生成调用图的缓存和分支预测探查器以及一个堆探查器。它还包括三个实验工具:堆栈/全局数组溢出检测器,第二个堆分析器(用于检查堆块的使用方式)以及SimPoint基本块向量生成器。它可在以下平台上运行:X86 / Linux,AMD64 / Linux,ARM / Linux,ARM64 / Linux,PPC32 / Linux,PPC64 / Linux,PPC64LE / Linux,S390X / Linux,MIPS32 / Linux,MIPS64 / Linux,X86 / Solaris ,AMD64 / Solaris,ARM / Android(2.3.x和更高版本),ARM64 / Android,X86 / Android(4.0和更高版本),MIPS32 / Android,X86 / Darwin和AMD64 / Darwin(Mac OS X 10.12)。
官网:
http://valgrind.org
当前最新版本valgrind-3.15.0
安装
要在Ubuntu或者debian操作系统上安装valgrind,可以输入
sudo apt-get update
sudo apt-get install valgrind
Valgrind 命令介绍:
用法: valgrind [options] prog-and-args
[options]: 常用选项,适用于所有Valgrind工具
–tool= 最常用的选项。运行 valgrind中名为toolname的工具。默认memcheck。
memcheck ------> 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况,比如:使用未初始化的内存,使用已经释放了的内存,内存访问越界等。
callgrind ------> 它主要用来检查程序中函数调用过程中出现的问题,检测程序代码的运行时间和调用过程,以及分析程序性能。
cachegrind ------> 它主要用来检查程序中缓存使用出现的问题,分析CPU的cache命中率、丢失率,用于进行代码优化。
helgrind ------> 它主要用来检查多线程程序中出现的竞争问题,用于检查多线程程序的竞态条件。
massif ------> 它主要用来检查程序中堆栈使用中出现的问题。堆栈分析器,指示程序中使用了多少堆内存等信息。
extension ------> 可以利用core提供的功能,自己编写特定的内存调试工具
-h –help 显示帮助信息。
-version 显示valgrind内核的版本,每个工具都有各自的版本。
-q –quiet 安静地运行,只打印错误信息。
-v –verbose 更详细的信息, 增加错误数统计。
-trace-children=no|yes 跟踪子线程? [no]
-track-fds=no|yes 跟踪打开的文件描述?[no]
-time-stamp=no|yes 增加时间戳到LOG信息? [no]
-log-fd= 输出LOG到描述符文件 [2=stderr]
-log-file= 将输出的信息写入到filename.PID的文件里,PID是运行程序的进行ID
-log-file-exactly= 输出LOG信息到 file
-log-file-qualifier= 取得环境变量的值来做为输出信息的文件名。 [none]
-log-socke