valgrind的安装及简单使用

valgrind是一款强大的C++程序调试工具,可帮助我们检测程序中的内存泄露、死锁等,valgrind的安装比较简单。下载了valgrind后,在linux系统中输入下列命令:

$ sudo apt-get install automake
$ tar jxf valgrind-3.16.1.tar.bz2
$ cd valgrind-3.16.1
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

期间可能遇到的问题:

1、如果输入./autogen.sh后出现拒绝访问的问题

这个问题大部分人不会遇到,如果遇到autogen.sh文件拒绝访问,即使我们切换到管理员权限下也还是无法访问,那我们直接修改文件权限即可。

$chmod 777 autogen.sh

2、在执行./autogen.sh命令时遇到aclocal: command not found error while running aclocal

出现这个问题主要是没有在执行./autogen.sh之前安装automake,在终端中输入sudo apt-get install automake即可。

上述主要是valgrind的安装过程,可以看出,整个过程还是比较简单的,下面我们用valgrind来调试一个简单的内存泄露程序,如下,我们编写一个简单的内存泄露程序,稍微学过点C++的人都知道这个程序存在内存泄露的问题。

#include <stdlib.h>
//
//
int main(void)
{
    int*a=(int*)malloc(10*sizeof(int));
    return 0;
}

接着在终端输入gcc main.cpp生成a.out文件,输入valgrind ./a.out来测试是否有内存泄露事件发生。终端输出如下结果:

从上图中我们可以看到,终端中输出a memory error detector以及total heap usage:1 allocs, 0 frees。因此可以判断我们的程序发生了内存泄露,那么如果我们的代码很长,我们仅仅知道存在内存泄露是不够的,我们希望知道程序中到底哪行代码导致了内存泄露。在终端中输入如下命令:

$g++ -g main.cpp
$valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./a.out

执行上述命令后,我们看到终端输出如下结果,从结果中可以看到main.cpp中第6行导致了内存泄露。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值