Linux C&C++ 内存泄漏检测工具之Valgrind
本文简要描述了在LINUX操作系统用户态C语言代码进程用Valgrind内存检查工具做检查的使
用方法,包括软件下载、安装、使用示例和解决办法等。
1. 引言
在项目中有大量的C语言程序是运行在Linux操作系统的用户态环境下,这些程序都需要频繁地
申请和释放内存,考虑到本项目组人员较多,且以新手为主,所以有必要采用工具来协助检查项目
中的各个进程或者模块的内存使用安全。
针对Linux操作系统环境下的C语言代码程序,业界有很多种类工具程序可以用来检查内存泄漏,
比如puriyf、bound check等。本文将引入一种名位Valgrind的内存泄漏检查工具。
Valgrind 是一款 Linux下(支持 x86、x86_64和ppc32)程序的免费内存调试工具包,包含多个
工具,如Memcheck,Cachegrind,Helgrind, Callgrind,Massif。它可以对编译后的二进制程序进行内存
使用监测(C语言中的malloc和free,以及C++中的new和delete),找出内存泄漏问题。
Valgrind 中包含的 Memcheck 工具可以检查以下的程序错误:
使用未初始化的内存 (Use of uninitialised memory)
使用已经释放了的内存 (Reading/writing memory after it has been free’d)
使用超过 malloc分配的内存空间(Reading/writing off the end of malloc’d blocks)
对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
申请的空间是否有释放 (Memory leaks – where pointers to malloc’d blocks are lost
forever)
malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new
[] vs free/delete/delete [])
src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
2. 安装试用
2.1. 编译安装 Valgrind
wget http://valgrind.org/downloads/valgrind-3.4.1.tar.bz2
tar xvf valgrind-3.4.1.tar.bz2
cd valgrind-3.4.1/
./configure --prefix=/usr/local/webserver/valgrind
make
make install
2.2. 使用 Valgrind
使用示例:对Linux操作系统自带的“ls”程序进程检查,返回结果中的“definitely
lost: 0 bytes in 0 blocks.”表示没有内存泄漏。
[root@kai /]# valgrind --tool=memcheck --leak-check=full ls
==1157== Memcheck, a memory error detector.