Valgrind ARM(aarch64) 交叉编译、移植与使用

        Valgrind是一款用于内存调试、内存泄漏检测以及性能分析、检测线程错误的软件开发工具。

        Valgrind 是运行在Linux 上的多用途代码剖析和内存调试软件。主要包括Memcheck、Callgrind、Cachegrind 等工具,每个工具都能完成一项任务调试、检测或分析。可以检测内存泄露、线程违例和Cache 的使用等。

        Valgrind 基于仿真方式对程序进行调试,它先于应用程序获取实际处理器的控制权,并在实际处理器的基础上仿真一个虚拟处理器,并使应用程序运行于这个虚拟处理器之上,从而对应用程序的运行进行监视。应用程序并不知道该处理器是虚拟的还是实际的,已经编译成二进制代码的应用程序并不用重新进行编译,Valgrind 直接解释二进制代码使得应用程序基于它运行,从而能够检查内存操作时可能出现的错误。

        所以在Valgrind下运行的程序运行速度要慢得多,而且使用的内存要多得多 - 例如,Memcheck工具下的程序是正常情况的两倍多。因此,最好在性能好的机器上使用Valgrind。

  • 从Valgrind官网下载源代码文件,目前使用的是

valgrind 3.19.0 (tar.bz2)https://sourceware.org/pub/valgrind/valgrind-3.19.0.tar.bz2

  • 解压源代码压缩包: tar -zxvf valgrind-3.19.0.tar.bz2
  • 进入解压的文件夹: cd valgrind-3.19.0
  • 使用configure进行配置:

--host=运行环境

--prefix=用于设置自定义的安装路径

./configure --prefix=~/valgrind-target/ 
--host=aarch64-linux 
CC=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc 
CXX=/opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
  • 编译
sudo make
  • 安装
sudo make install
  • 进入安装路径
cd ~/valgrind-target/libexec/valgrind
  • 拷贝目录下所有"*arm*"和default.supp文件到一个文件夹
  • 烧录该文件夹到核心板root根目录下
  • 打开/etc/profile
vi /etc/profile
  • 在文件最下方添加环境变量
export VALGRIND_LIB=/root/valgrind
  • 命令行拷贝文件夹中的valgrind可执行文件到/usr/bin
cp /root/valgrind/valgrind /usr/bin/.
  • 命令行使用valgrind检测程序test的内存泄漏情况
valgrind ./test

  

### Valgrind 移植AARCH64 架构的详细步骤 #### 安装依赖库 为了成功编译和运行 Valgrind,在目标平台上需要安装一些必要的开发工具和库。通常这些可以通过包管理器来完成。 对于基于 Debian 的系统,可以执行如下命令: ```bash sudo apt-get update && sudo apt-get install build-essential libtool autoconf automake texinfo bison flex ``` 对于 Red Hat/CentOS 类型的操作系统,则应使用 yum 或 dnf 来代替 apt-get[^1]。 #### 获取源码并打补丁 下载最新版本的 Valgrind 源代码压缩包,并解压它。由于官方可能尚未完全支持 AArch64 平台,因此还需要应用社区贡献者提供的针对该平台的支持补丁文件。 可以从 GitHub 上查找适用于 AArch64Valgrind 补丁集,并按照说明文档中的指示操作。 #### 配置构建选项 进入 Valgrind 解压后的目录,创建一个新的子目录用于存放编译产物,这有助于保持项目结构清晰整洁。接着配置 Makefile 文件以便于后续编译过程能够识别当前体系结构特性。 ```bash mkdir aarch64-build && cd $_ ../configure --prefix=/usr/local/aarch64-valgrind --host=aarch64-linux-gnu CFLAGS="-O2" ``` 这里指定了 `--host` 参数告知 configure 脚本这是交叉编译环境;同时设置了优化级别 `-O2` 编译标志以提高性能表现。 #### 执行编译测试 一旦完成了上述准备工作之后就可以正式开始编译工作了。考虑到大型项目的复杂度以及可能出现的问题,建议先进行全面自检确保一切正常无误后再继续下一步骤。 ```bash make -j$(nproc) make check ``` 如果所有单元测试都能顺利通过的话就证明移植初步成功了! #### 安装至指定路径下 最后一步就是把生成好的二进制文件复制到之前定义过的前缀位置当中去。注意此时应当具有足够的权限才能顺利完成此动作。 ```bash sudo make install ``` 至此整个迁移流程宣告结束,现在可以在 ARMv8 设备上尝试调用 valgrind 工具来进行内存调试啦! #### 设置环境变量 为了让新安装的应用程序能够在任何地方被找到,记得更新 shell session 中的相关环境变量设置。具体做法已在参考资料中给出过相应指导。 ```bash export PATH=/usr/local/aarch64-valgrind/bin:$PATH export INCLUDE=/usr/local/aarch64-valgrind/include:$INCLUDE export LD_LIBRARY_PATH=/usr/local/aarch64-valgrind/lib:/usr/local/aarch64-valgrind/lib64:$LD_LIBRARY_PATH ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值