valgrind内存检测工具安装
  WA7CTGxVaqOw 2023年11月02日 31 0
C++

参考: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内存泄露检测工具,进而尝试去使用工具协助检测。
image

但是终端报警告:

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

  1. 命令安装
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?

估计时软件源的问题,但是我使用的系统不能轻易更换软件源,所以使用另外一种方法。

  1. 在windows系统下载好安装包后
    (下载地址:https://valgrind.org/downloads/current.html) ,发送到linux系统进行安装操作。
    image
  • 上面应用发送到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)
  • 然后在最后一行加入上述环境变量,如下图所示:
    image

  • 刷新一下配置文件:source /etc/profile 或者 source .bashrc。执行valgrind --version终端会打印版本信息,说明安装成功。
    image

遇到问题

  1. 在执行./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。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

上一篇: C++11:列表初始化 下一篇: C++11:tuple元组
  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   78   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   56   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   43   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   57   0   0 C++
WA7CTGxVaqOw
作者其他文章 更多