一、前言
对于C/C++程序员来说,关于内存问题真是让人头痛不已,尤其是内存泄露、使用未初始化的局部变量进行跳转或移动等隐形问题。要求程序员养成良好的编码习惯确实很重要,但是人总会出现稀里糊涂的时候,遇到内存泄露等问题还是在所难免,好在有了众多的内存检测工具,真是帮了程序员的大忙啊。下面将介绍一款强大的Linux开源工具Valgrind,非常棒,内存检测工具中的瑞士军刀。
二、简介
Valgrind 是一款 Linux下C/C++
程序的内存检测工具,一个显著的特点是无需重新编译,可以直接对debug版本的程序进行分析测试。
目前,最新的版本valgrind-3.8.1
支持X86/Linux, AMD64/Linux, ARM/Linux, PPC32/Linux, PPC64/Linux, S390X/Linux, MIPS/Linux, ARM/Android (2.3.x and later), X86/Android (4.0 and later), X86/Darwin and AMD64/Darwin (Mac OS X 10.6 and 10.7, with limited support for 10.8)
。
相关资料:
1、http://valgrind.org/ (官网,资料全面,很详实,但全是英文,全力推荐)
2、
http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/ (IBM的中文资料,很详细,全力推荐)
3、
http://blog.csdn.net/yanghao23/article/details/7514587 (网友的总结体会,写得好)
三、快速入门
1、下载与安装
上官网下载最新版本:
valgrind-3.8.1,按如下步骤在解压并进行默认安装:
tar xvf valgrind-3.8.1.tar.bz2
cd valgrind-3.8.1/
./configure
make
make install
2、快速使用(对Linux系统的程序“ls”进行
检测
)
valgrind ls / (快速进行默认Memcheck检测)
valgrind --leak-check=full --track-origins=yes -v ls /
(进行Memcheck检测,并打印详细的结果,不过速度慢了很多,这个我用得更多)
root@root:/media/workspace/#
valgrind ls /
==20361== Memcheck, a memory error detector
==20361== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==20361== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==20361== Command: ls /
==20361==
bin cdrom dev gnome-terminal.desktop initrd.img lib lib64 media opt root selinux swap tftpboot tmp var vmlinuz.old
boot data etc home initrd.img.old lib32 lost+found mnt proc sbin srv sys tftpboot.bak usr vmlinuz
==20361==
==20361== HEAP SUMMARY:
==20361== in use at exit: 33,197 bytes in 38 blocks
==20361== total heap usage: 567 allocs, 529 frees, 97,898 bytes allocated
==20361== Memcheck, a memory error detector
==20361== Copyright (C) 2002-2009, and GNU GPL'd, by Julian Seward et al.
==20361== Using Valgrind-3.6.0.SVN-Debian and LibVEX; rerun with -h for copyright info
==20361== Command: ls /
==20361==
bin cdrom dev gnome-terminal.desktop initrd.img lib lib64 media opt root selinux swap tftpboot tmp var vmlinuz.old
boot data etc home initrd.img.old lib32 lost+found mnt proc sbin srv sys tftpboot.bak usr vmlinuz
==20361==
==20361== HEAP SUMMARY:
==20361== in use at exit: 33,197 bytes in 38 blocks
==20361== total heap usage: 567 allocs, 529 frees, 97,898 bytes allocated