valgrind内存检测工具安装
参考:https://blog.csdn.net/xiaoxiaofeng001/article/details/88675841
简单介绍
- Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。
- Valgrind这个名字取自北欧神话中英灵殿的入口。
- Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖。
- Valgrind遵守GNU通用公共许可证条款,是一款自由软件。
- 到3.3.0版本为止,Valgrind支持x86、x86-64以及PowerPC上的Linux。除此之外,还有一些其它非正式支持的类Unix平台(如FreeBSD、NetBSD以及Mac OS X)。
个人使用的原因
在公司开发好一个程序(linux系统下的qt程序)后,进入测试阶段,发现在运行过程中,内存泄露情况及其严重,通过检查逐句检查代码(new、free、malloc、delete、析构、while循环等地方),修改了一大部分后,再次测试发现内存泄露还是存在,于是看到QT软件有一个Valgrind内存泄露检测工具,进而尝试去使用工具协助检测。
但是终端报警告:
valgrind --child-silent-after-fork=yes --xml-socket=127.0.0.1:45500 --log-socket=127.0.0.1:39589 --xml=yes --smc-check=stack --tool=memcheck --gen-suppressions=all --track-origins=yes --leak-check=summary --num-callers=25
Failed to start program.Path or permissions wrong?
Analyzing finished.
具体原因:Valgrind工具没有安装。
安装Valgrind
- 命令安装
sudo apt-get install valgrind
但是本人在命令安装时报错:
you want to continue? [Y/n] y
Err:1 http://mirrors.ustc.edu.cn/debian stable/main arm64 libc6-dbg arm64 2.28-10
404 Not Found [IP: 202.141.160.110 80]
E: Failed to fetch http://mirrors.ustc.edu.cn/debian/pool/main/g/glibc/libc6-dbg_2.28-10_arm64.deb 404 Not Found [IP: 202.141.160.110 80]
E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
估计时软件源的问题,但是我使用的系统不能轻易更换软件源,所以使用另外一种方法。
- 在windows系统下载好安装包后
(下载地址:https://valgrind.org/downloads/current.html) ,发送到linux系统进行安装操作。
- 上面应用发送到linux系统指定目录下后,解压,得到valgrind-3.20.0文件夹,里面包含一些.sh配置文件:
tar -xvf valgrind-3.20.0.tar
- 进入valgrind-3.20.0目录,运行以下命令:
./autogen.sh (在对应的目录下执行命令)
./configure --prefix=/usr/local/valgrind (此处为“ 配置 ”操作,--prefix后面为自己指定的配置路径)
make -j8 (此处为“ 编译 ”操作,消耗很多时间,可以添加-j8,使用多核CPU的8个核心来编译,速度会变快)
make install (此处为“ 安装 ”操作)
make install-recursive
- 把valgrind的bin目录路径添加到环境变量PATH中,打开~.bashrc(或者/etc/profile)文件,在最后一行加入
PATH=${PATH}:/usr/local/valgrind/bin
- 执行如下命令:
cd ~ (隐藏文件.bashrc在家目录~)
vi .bashrc
(或者 vi /etc/profile)
-
然后在最后一行加入上述环境变量,如下图所示:
-
刷新一下配置文件:source /etc/profile 或者 source .bashrc。执行valgrind --version终端会打印版本信息,说明安装成功。
遇到问题
- 在执行./autogen.sh命令时遇到报错:
aclocal: command not found error while running aclocal.
- 说明丢失的aclocal,而aclocal是automake包一部分,automake包依赖aclocal,因此需要安装automake。如果linux的yum源正常的话可以使用命令:
sudo apt-get install automake
- 如果yum源没法用或者没联网的话,可以采用离线挂载的方式进行安装,首先把redhat系统的iso文件,放到 / 目录下,然后执行如下命令:
mount –o loop /RHEL_6.4\ X86_64.iso
yum –y install automake
注意如果虚拟机内存过小的话,安装会失败。
2. 执行./autogen.sh命令时提示系统中已有的automake版本较低,需要更新automake版本。
我把automake.1.11版本上传到了个人工作区间,然后根据下面这片博客进行安装即可。
https://blog.csdn.net/qq_30549833/article/details/72955881
这个网址是Valgrind的使用说明文档:
http://www.valgrind.org/docs/manual/ms-manual.html
这篇博客也有介绍:
https://www.cnblogs.com/skyfsm/p/8823170.html
3. 执行过程中,终端会出现很多 make[1]: Leaving directory '/usr/local/xxxxx' 提示,不用管,继续make install。
make[1]: Leaving directory `/usr/local/nginx-1.12.1;
然后:
- 我只需要去看/usr/local下面是否有valgrind文件夹?
- 如果已经有valgrind文件夹?我们再去看valgrind是否可以正常使用?
- 如果执行valgrind --version ,或者./valgrind都有提示,则说明安装成功。
题外总结
《./configure –prefix 命令用法》
在Linux上编译安装软件时,经常遇到./configure –prefix=usr 这个命令。./configure –prefix是什么意思呢?下面简单介绍一下./configure –prefix 的用法。
源码的安装一般由有这三个步骤:配置(configure)、编译(make)、安装(make install)。
- Configure是一个可执行脚本,它有很多选项,在待安装的源码路径下使用命令./configure –help输出详细的选项列表。其中–prefix选项就是配置安装的路径。
- 如果不配置该选项,安装后可执行文件默认放在/usr /local/bin,库文件默认放在/usr/local/lib,配置文件默认放在/usr/local/etc,其它的资源文件放在/usr /local/share,比较分散。
- 为了便于集中管理某个软件的各种文件,可以配置–prefix,如:
./configure –prefix=/usr/local
可以把所有资源文件放在/usr/local的路径中,就不会分散了。
- 用--prefix选项的另一个好处是卸载软件或移植软件。当某个安装的软件不再需要时,只须简单地删除该安装目录,就可以把软件卸载得干干净净;移植软件只需拷贝整个目录到另外一个机器即可(相同的操作系统)。
- 当要卸载程序,也可以在原来的make目录下用一次make uninstall,但前提是make文件指定过uninstall。