Valgrind 3.11.0编译安装

Valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。
Valgrind遵守GNU通用公共许可证条款,是一款自由软件。
到3.3.0版本为止,Valgrind支持x86、x86-64以及PowerPC上的Linux。除此之外,还有一些其它非正式支持的类Unix平台(如FreeBSD、NetBSD以及Mac OS X)。

1、下载Valgrind 3.11.0

直接下载源码包

wget http://valgrind.org/downloads/valgrind-3.11.0.tar.bz2
tar -xjvf valgrind-3.11.0.tar.bz2
cd valgrind-3.11.0/

使用svn克隆一个

svn co svn://svn.valgrind.org/valgrind/trunk valgrind

2、生成Makefile并使用它进行编译

生成Makefile的步骤在README这个文件中有写。

    1. 运行./autogen.sh来设置环境(你需要标准的autoconf工具)
      这个脚本其实是调用的aclocal autoheader automake autoconf,所以必须先安装好它,如果没有安装,在运行这个脚本的时候会提示你的。
    1. 运行./configure来生成Makefile文件
      这里你可以使用./configure --help来查看可以使用哪些参数设置。
      一般设置好安装路径即可./configure --prefix=/usr/local/valgrind
    1. 运行make进行编译,运行make install进行安装。

下面是我编译时候的步骤

#运行 autogen.sh
o@o-pc:~/software/valgrind-3.11.$ ./autogen.sh
running: aclocal
running: autoheader
running: automake -a
running: autoconf #运行configure
o@o-pc:~/software/valgrind-3.11.$ ./configure --prefix=/usr/local/valgrind
checking for a BSD-compatible install... /usr/bin/install -c
.... .....
config.status: executing depfiles commands Maximum build arch: amd64
Primary build arch: amd64
Secondary build arch: x86
Build OS: linux
... ... #运行make o@o-pc:~/software/valgrind-3.11.$ make
echo "# This is a generated file, composed of the following suppression rules:" > default.supp
echo "# " exp-sgcheck.supp xfree-.supp xfree-.supp glibc-.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-.X.supp >> default.supp
cat exp-sgcheck.supp xfree-.supp xfree-.supp glibc-.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-.X.supp >> default.supp
make all-recursive
... ...
#运行make install
o@o-pc:~/software/valgrind-3.11.$ sudo make install
[sudo] o 的密码:
make install-recursive
... ...

3、测试一下
编译完成之后可以测试一下。
因为上面编译安装的时候指定了安装目录,所以还需要把valgrindbin目录路径添加到环境变量PATH中。否则只能使用全路径来运行valgrind
这里我把它写入到~/.bashrc文件中。打开~/.bashrc文件,然后在最后添加一行PATH=${PATH}:/usr/local/valgrind/bin,之后使用source ~/.bashrc来更新一下。

真的测试一下哦(这是README里面给出的测试命令)

o@o-pc:~/software$ valgrind ls -l
==== Memcheck, a memory error detector
==== Copyright (C) -, and GNU GPL'd, by Julian Seward et al.
==== Using Valgrind-3.11. and LibVEX; rerun with -h for copyright info
==== Command: ls -l
====
总用量
drwxrwxr-x o o 12月 : valgrind-3.11.
-rw-rw-r-- o o 9月 : valgrind-3.11..tar.bz2
====
==== HEAP SUMMARY:
==== in use at exit: , bytes in blocks
==== total heap usage: allocs, frees, , bytes allocated
====
==== LEAK SUMMARY:
==== definitely lost: bytes in blocks
==== indirectly lost: bytes in blocks
==== possibly lost: bytes in blocks
==== still reachable: , bytes in blocks
==== suppressed: bytes in blocks
==== Rerun with --leak-check=full to see details of leaked memory
====
==== For counts of detected and suppressed errors, rerun with: -v
==== ERROR SUMMARY: errors from contexts (suppressed: from )

自己写一个内存访问越界和泄露的小例子来测试一下

#include <stdlib.h>
int main()
{
((char*)malloc())[] = ;
return ;
}

使用下面的命令来检查

 valgrind --track-fds=yes --leak-check=full --undef-value-errors=yes  ./test

检查结果

==== Memcheck, a memory error detector
==== Copyright (C) -, and GNU GPL'd, by Julian Seward et al.
==== Using Valgrind-3.11. and LibVEX; rerun with -h for copyright info
==== Command: ./test
====
==== Invalid write of size # 这里检测到了内存越界访问
==== at 0x400548: main (in /home/o/software/test)
==== Address 0x520204a is bytes after a block of size alloc'd
==== at 0x4C2BC50: malloc (vg_replace_malloc.c:)
==== by 0x400543: main (in /home/o/software/test)
====
====
==== FILE DESCRIPTORS: open at exit. #打开了三个文件描述符(标准输入输出错误)
==== Open file descriptor : /dev/pts/
==== <inherited from parent>
====
==== Open file descriptor : /dev/pts/
==== <inherited from parent>
====
==== Open file descriptor : /dev/pts/
==== <inherited from parent>
====
====
==== HEAP SUMMARY: #堆使用摘要
==== in use at exit: bytes in blocks
==== total heap usage: allocs, frees, bytes allocated #申请/释放详情
====
==== bytes in blocks are definitely lost in loss record of
==== at 0x4C2BC50: malloc (vg_replace_malloc.c:)
==== by 0x400543: main (in /home/o/software/test)
====
==== LEAK SUMMARY: 泄露摘要
==== definitely lost: bytes in blocks
==== indirectly lost: bytes in blocks
==== possibly lost: bytes in blocks
==== still reachable: bytes in blocks
==== suppressed: bytes in blocks
====
==== For counts of detected and suppressed errors, rerun with: -v
==== ERROR SUMMARY: errors from contexts (suppressed: from )

可以看出上面检测到了内存越界访问和内存泄露。
一般写玩程序后都可以使用valgrind来检测一下,避免内存泄露的问题(还有文件打开情况)

Valgrind 3.11.0编译安装的更多相关文章

  1. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14

    准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7. ...

  2. centos 7.0 编译安装php 7.0.3

    php下载页面 http://cn2.php.net/downloads.php 7.0.3多地区下载页面 http://cn2.php.net/get/php-7.0.3.tar.gz/from/a ...

  3. CentOS 7.0编译安装Nginx1.6.0+MySQL5.6.19+PHP5.5.14方法分享

    一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi ...

  4. Redis 3.0 编译安装

    Redis 3.0 编译安装 http://www.xuchanggang.cn/archives/991.html

  5. centos 7.0 编译安装mysql 5.6.22 再次总结 成功编译安装~ 越来越熟练了~

    查找php.ini文件所在位置 [root@localhost /]# find -name php.ini ./usr/etc/php/etc/php.ini mysql官网的安装说明http:// ...

  6. msyql8.0编译安装

    1.安装依赖 yum  -y install wget  cmake gcc gcc-c++ncurses  ncurses-devel  libaio-devel openssl openssl-d ...

  7. centos 7.0 编译安装php 5.6.7

    编译安装php参考资料 MySQL PHP API http://dev.mysql.com/doc/apis-php/en/index.html nginx + php +mysql 最简单安装 官 ...

  8. hadoop2.1.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

  9. hadoop2.1.0和hadoop2.2.0编译安装教程

    由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO ut ...

随机推荐

  1. JavaWeb学习笔记——javabean与表单

  2. C++ typedef用法小结 (※不能不看※)

    C++ typedef用法小结 (※不能不看※) 第一.四个用途 用途一: 定义一种类型的别名,而不只是简单的宏替换.可以用作同时声明指针型的多个对象.比如:char* pa, pb; // 这多数不 ...

  3. win10系统点击关机按钮后无法关机的解决办法

    先吐槽下:我越发的发现我现在成了修电脑的了,我的职位是linux运维,现在干的活很蛋疼,公司只有我一个运维,修电脑.搞网络.抬服务器.弄监控,搭环境.搞自动化发布.弄虚拟化都我一个人哇.好了,打住. ...

  4. ecshop 如果缩略图为空,使用默认图片

    引用:$row['goods_img'] = get_image_path($row['goods_id'], $row['goods_img']); lib_common.php /** * 重新获 ...

  5. ecshop循环foreach,iteration,key,index

    转载: 最近刚接触ecshop不久,感觉是非常的强大,做商城网站,整个流程都差不多搞好了,就是支付流程要自己完善完善,不过也有不足,文章功能还不够好. 通过几天的应用,总结出了ec模版中foreach ...

  6. yourphp添加KindEditor编辑器

    <tr> <td align="right">故障描述</td> <script charset="utf-8" sr ...

  7. TCP/IP协议详解 卷1—读书笔记(1)

    0. 前言 本系列简要记录该书的关键点,用以梳理知识点. 1. 简介 简述链路层下的一些相关协议,如以太网IP数据报,802标准,SLIP,CSLIP,PPP. 链路层主要为上层(IP)和本层(ARP ...

  8. Quartz.NET总结(三)Quartz 配置

    前两篇文章,已经介绍了Quartz.NET的使用和Cron表达式表达式的写法,今天说一说Quartz的配置,Quartz相关的配置有三个quartz.config.quartz_jobs.xml.lo ...

  9. C-全局变量与局部变量

  10. ASP.NET MVC使用Bootstrap系列(3)——使用Bootstrap 组件

    阅读目录 Bootstrap 导航条 列表组 徽章 媒体对象 页头 路径导航 分页 输入框组 按钮式下拉菜单 警告框 进度条 小结 Bootstrap为我们提供了十几种的可复用组件,包括字体图标.下拉 ...