Valgrind 的下载安装和使用 (centos7.6, 其他linux应该类同)

本文详细介绍了Valgrind工具的下载、安装及使用方法,通过实例演示如何使用Valgrind检测C++代码中的内存错误,如内存泄漏、双释放等问题,并解析了Valgrind的输出结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、为什么需要Valgrind?

调试各种各样的崩溃问题,内存泄露问题,内存二次释放问题(double free),core dump,

Valgrind 是个开源的工具,功能很多。例如检查内存泄漏工具---memcheck。

二、Valgrind的下载和安装

1. 下载  (版本根据你当时的最新版本。官网: http://www.valgrind.org/downloads/)

wget https://sourceware.org/pub/valgrind/valgrind-3.15.0.tar.bz2

2. 解压

tar xjvf valgrind-3.15.0.tar.bz2

3. 安装

yum install autoconf
yum install automake
cd valgrind-3.15.0
chmod 775 autogen.sh
./autogen.sh
#如果提示aclocal相关信息,则需要 yum install autoconf automake
./configure
make
make install

查看是否安装成功,使用脚本

valgrind --version

Valgrind使用方法:

1. C++代码,测试用例

//hello.cpp
#include<iostream>
#include<stdio.h>

using namespace std;

int main()
{

    char *p = (char*)malloc(10);
    free(p);
    free(p);
    return 0;
}

2. 编译和链接

-g选项要添加,生成a.out

g++ hello.cpp -g

3. 运行和调试

valgrind --log-file=output.txt --tool=memcheck --leak-check=yes --show-reachable=yes ./a.out

4. 输出日志

其中--log-file 是输出日志到文件。去掉这个选项可以在终端显示上面观看

==128714== Memcheck, a memory error detector
==128714== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==128714== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==128714== Command: ./hello
==128714== Parent PID: 7668
==128714== 
==128714== Invalid free() / delete / delete[] / realloc()
==128714==    at 0x4C2AF5D: free (vg_replace_malloc.c:540)
==128714==    by 0x4008B2: main (hello.cpp:13)
==128714==  Address 0x5a23040 is 0 bytes inside a block of size 10 free'd
==128714==    at 0x4C2AF5D: free (vg_replace_malloc.c:540)
==128714==    by 0x40088A: main (hello.cpp:11)
==128714==  Block was alloc'd at
==128714==    at 0x4C29E63: malloc (vg_replace_malloc.c:309)
==128714==    by 0x40085E: main (hello.cpp:9)
==128714== 
==128714== 
==128714== HEAP SUMMARY:
==128714==     in use at exit: 0 bytes in 0 blocks
==128714==   total heap usage: 1 allocs, 2 frees, 10 bytes allocated
==128714== 
==128714== All heap blocks were freed -- no leaks are possible
==128714== 
==128714== For lists of detected and suppressed errors, rerun with: -s
==128714== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)

上面的结果可以看到1次申请内存,两次释放内存。提示报错了。

 

 

<think>我们被要求回答:如何在CentOS 7安装使用Valgrind工具 根据引用,我们可以总结安装步骤使用方法。 安装步骤: 1. 确保系统已安装必要的开发工具(如gcc, make等)autoconf、automake(引用[2]提到需要先安装autoconfautomake)。 2.Valgrind官网下载源码包,或者通过yum安装(引用[3][4]提供了两种方法)。 方法一:通过yum安装(最简单) sudo yum install valgrind 方法二:源码安装(可以获取最新版本,但步骤稍多) a. 下载源码包(如valgrind-3.11.0.tar.bz2) b. 解压:tar -xvf valgrind-3.11.0.tar.bz2 c. 进入解压目录:cd valgrind-3.11.0 d. 配置:./autogen.sh(如果使用下载的源码包,可能需要先运行autogen.sh,但通常使用./configure)[引用4] e. 编译:make f. 安装:sudo make install 注意:引用[4]提到要先安装autoconfautomake,所以如果选择源码安装,确保这些工具已安装使用Valgrind: 1. 内存泄漏检测:valgrind --leak-check=full ./your_program 2. 其他工具:Valgrind包含多个工具,如Memcheck(默认)、Cachegrind等。 关于版本选择:引用[1]提到Valgrind 3.10.03.11.0都适用于CentOS 7。通常yum安装的版本可能较旧,但稳定;源码安装可以获取较新版本。 因此,我们给出两种安装方法,并简单介绍使用。 注意:用户可能没有root权限,但使用yum安装需要sudo。源码安装可以选择安装到用户目录(通过配置--prefix)。 步骤: 1. 安装必要的依赖(对于源码安装): sudo yum groupinstall "Development Tools" sudo yum install autoconf automake 2. 安装Valgrind(两种方法选一) 使用示例: 编译程序:gcc -g -o test test.c 运行Valgrindvalgrind --leak-check=yes ./test 注意:编译时加上-g选项,以便Valgrind输出行号信息。 根据引用[3][4],我们给出上述步骤。 由于用户明确在CentOS 7上操作,我们按照CentOS 7的命令(yum)来写。 另外,引用[1]中用户关心稳定性的问题,我们可以建议:如果追求稳定,使用yum安装的版本(通常是经过测试的版本);如果需要最新功能,则使用源码安装。 因此,回答如下:</think>### 如何在CentOS 7安装使用Valgrind工具 #### 一、安装准备 1. **安装开发工具链**(必需依赖): ```bash sudo yum groupinstall "Development Tools" ``` 2. **安装autoconfautomake**(源码编译时需要): ```bash sudo yum install autoconf automake ``` #### 二、两种安装方式 **方法1:YUM安装(推荐,简单稳定)** ```bash sudo yum install valgrind ``` - **版本说明**:CentOS 7官方源提供的是经过充分测试的稳定版(如3.10.0或3.11.0),兼容性最佳[^1][^3]。 **方法2:源码安装(获取最新版)** ```bash wget https://sourceware.org/pub/valgrind/valgrind-3.20.0.tar.bz2 # 替换为官网最新版 tar -xvf valgrind-*.tar.bz2 cd valgrind-*/ ./configure make sudo make install ``` - **验证安装**:`valgrind --version` #### 三、基础使用示例 1. **编译带调试信息的程序**: ```bash gcc -g -o test_program test_program.c # -g选项生成调试符号 ``` 2. **内存泄漏检测**: ```bash valgrind --leak-check=full --show-leak-kinds=all ./test_program ``` - `--leak-check=full`:显示详细泄漏位置 - `--show-leak-kinds=all`:显示所有泄漏类型 3. **非法内存访问检测**: ```bash valgrind --track-origins=yes ./test_program ``` - `--track-origins=yes`:追踪未初始化变量来源 #### 四、输出结果解析 - **关键指标**: - `HEAP SUMMARY`:堆内存分配统计 - `LEAK SUMMARY`:内存泄漏分类 - `ERROR SUMMARY`:错误数量汇总 - **错误示例**: ``` ==12345== Invalid write of size 4 ==12345== at 0x40065E: main (test.c:10) # 错误位置 ``` #### 五、使用建议 1. **调试技巧**: - 结合`-g`编译选项显示源代码行号 - 使用`--log-file=valgrind.log`输出到文件 2. **常见问题处理**: - 若报告`System V IPC`错误,添加`--trace-children=yes`选项 - 误报问题:通过`--suppressions=suppress_file`忽略第三方库误报 > **稳定性说明**:CentOS 7官方源提供的Valgrind 3.10.0/3.11.0经过充分验证,生产环境推荐优先选用YUM安装方式[^1]。源码编译的新版本可能引入未知兼容性问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值