学习记录Valgrind,内容参考自《后台开发》及以下博客:
http://blog.chinaunix.net/uid-23629988-id-3033741.html
这篇文章中使用的选项track-fds能够检测文件描述符问题
https://blog.csdn.net/miss_acha/article/details/19839715
https://www.cnblogs.com/wangkangluo1/archive/2011/07/20/2111248.html
https://blog.csdn.net/shixin_0125/article/details/78590796
这篇博客使用了debug.sh和makefile,可以借鉴下
https://blog.csdn.net/yanghao23/article/details/7514587
这篇文章的描述不错,可以参考
一、Valgrind安装
方法一:一键命令安装
# 安装
sudo apt-get install valgrind
#查看版本
valgrind --version
#移除
sudo apt-get remove valgrind
若使用之前较老版本,在configure时会出现错误。
error: please use gcc >= 3.0 or clang >= 2.9 or icc >= 13.0
因此,先去Valgrind官网,选择最新版本的链接地址,在Linux环境下执行以下命令:
wget ftp://sourceware.org/pub/valgrind/valgrind-3.13.0.tar.bz2
#解压
tax xvf valgrind-3.13.0.tar.bz2
#进入文件夹
cd valgrind-3.13.0
#指定安装路径,生成Makefile
./configure --prefix=/home/pp/software/valgrind
#读取指令,编译
make
#安装到指定位置
make install
二、Valgrind概念
valgrind通常用来成分析程序性能及程序中的内存泄露错误
- Valgrind工具集简绍
Valgrind包含下列工具:
1、memcheck:检查程序中的内存问题,如泄漏、越界、非法指针等。
2、callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。
3、cachegrind:分析CPU的cache命中率、丢失率,用于进行代码优化。
4、helgrind:用于检查多线程程序的竞态条件。
5、massif:堆栈分析器,指示程序中使用了多少堆内存等信息。
6、lackey:
7、nulgrind:
这几个工具的使用是通过命令:valgrand --tool=name 程序名来分别调用的,当不指定tool参数时默认是 --tool=memcheck - Valgrind工具详解
这里仅仅学习最常用的工具Memcheck,用来检测程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc、free、new、delete的调用都会被捕获。所以,它能检测以下问题:
1、对未初始化内存的使用;
2、读/写释放后的内存块;
3、读/写超出malloc分配的内存块;
4、读/写不适当的栈中内存块;
5、内存泄漏,指向一块内存的指针永远丢失;
6、不正确的malloc/free或new/delete匹配;
7、memcpy()相关函数中的dst和src指针重叠。
这些问题往往是C/C++程序员最头疼的问题,Memcheck能在这里帮上大忙。
gcc memleak.c -g -o memleak
./memleak
/home/pp/software/valgrind/bin/valgrind --track-fds=yes --leak-check=full ./memleak
三、添加到环境变量
添加到全局环境变量有三种方法:
vim /etc/profile
或者 vim ~/.bashrc
添加格式如下
export PATH=/home/pp/software/valgrind/bin/valgrind :$PATH
三种方法都可以:
方法1:对当前终端有效
在当期终端输入
export PATH=$PATH:/usr/local/bin
方法2: 对当前用户有效
vi ~/.bashrc
export PATH=/home/pp/software/valgrind/bin/valgrind :$PATH
多个路径之间以:冒号分隔。
source ~/.bashrc生效
方法3:对所有用户有效
vi /etc/profile
查看echo $PATH,验证。