Valgrind 3.11.0编译安装

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
 [email protected]-pc:~/software/valgrind-3.11.0$ ./autogen.sh
running: aclocal
running: autoheader
running: automake -a
running: autoconf

#运行configure
[email protected]-pc:~/software/valgrind-3.11.0$ ./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

[email protected]-pc:~/software/valgrind-3.11.0$ make
echo "# This is a generated file, composed of the following suppression rules:" > default.supp
echo "# " exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp  >> default.supp
cat exp-sgcheck.supp xfree-3.supp xfree-4.supp glibc-2.X-drd.supp glibc-2.34567-NPTL-helgrind.supp glibc-2.X.supp >> default.supp
make  all-recursive
... ...
#运行make install
[email protected]-pc:~/software/valgrind-3.11.0$ sudo make install
[sudo] o 的密码:
make  install-recursive
... ...

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

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

[email protected]:~/software$ valgrind ls -l
==4504== Memcheck, a memory error detector
==4504== Copyright (C) 2002-2015, and GNU GPL‘d, by Julian Seward et al.
==4504== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==4504== Command: ls -l
==4504==
总用量 11636
drwxrwxr-x 26 o o     4096 12月 29 11:11 valgrind-3.11.0
-rw-rw-r--  1 o o 11910809  9月 23 18:53 valgrind-3.11.0.tar.bz2
==4504==
==4504== HEAP SUMMARY:
==4504==     in use at exit: 19,436 bytes in 8 blocks
==4504==   total heap usage: 205 allocs, 197 frees, 86,286 bytes allocated
==4504==
==4504== LEAK SUMMARY:
==4504==    definitely lost: 0 bytes in 0 blocks
==4504==    indirectly lost: 0 bytes in 0 blocks
==4504==      possibly lost: 0 bytes in 0 blocks
==4504==    still reachable: 19,436 bytes in 8 blocks
==4504==         suppressed: 0 bytes in 0 blocks
==4504== Rerun with --leak-check=full to see details of leaked memory
==4504==
==4504== For counts of detected and suppressed errors, rerun with: -v
==4504== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 1 from 1)

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

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

使用下面的命令来检查

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

检查结果

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

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

时间: 2024-10-02 08:29:25

Valgrind 3.11.0编译安装的相关文章

Centos 7.0 编译安装LAMP(Linxu+apache+mysql+php)之源码安装Mysql (二)

mysql 简介: MySQL是一个关系型数据库管理系统,关系数据库将数据保存在不同的表中,这样就增加了速度并提高了灵活性.目前其属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件.MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言. 安装环境: 系统: centos 7.0 最小化安装 软件

Centos 7.0 编译安装LNMP(Linxu+nginx+mysql+php)之源码安装nginx (一)

nginx简介:       Nginx (engine x) 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日. 其将源代码以类BSD许可证的形式发布,因它的稳定性.丰富的功能集.示例配置文件和低系统资源的消耗而闻名.2011年6月1日,nginx 1.0.4发布. Nginx是一款轻量级的Web 服务器

CentOS 7.0编译安装Nginx+MySQL+PHP

转自http://www.centoscn.com/CentosServer/www/2014/0904/3673.html 准备篇: CentOS 7.0系统安装配置图解教程 http://www.centoscn.com/image-text/setup/2014/0724/3342.html 一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop fi

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

转载自http://www.osyunwei.com/archives/7891.html 准备篇: CentOS 7.0系统安装配置图解教程 http://www.osyunwei.com/archives/7829.html 一.配置防火墙,开启80端口.3306端口 CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. 1.关闭firewall: systemctl stop firewalld.service #停止firewall systemc

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

一.配置防火墙,开启80端口.3306端口CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙.1.关闭firewall: systemctl stop firewalld.service #停止firewall systemctl disable firewalld.service #禁止firewall开机启动 2.安装iptables防火墙 yum install iptables-services #安装 vi /etc/sysconfig/ipta

hadoop2.1.0编译安装教程(转载)

由于现在hadoop2.0还处于beta版本,在apache官方网站上发布的beta版本中只有编译好的32bit可用,如果你直接下载安装在64bit的linux系统的机器上,运行会报一个INFO util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable的错误,但在实际测试中是可以正常安装并可以运行自带的w

用VMware 11.0虚拟机安装Win8 系统失败,提示“shsucdx can&#39;t install”

研究了好久,网上那些更改bios的方法根本行不通,因为该版本的biso根本没有SATA选项!解决方法很简单,如下图: 重启虚拟机即可. 用VMware 11.0虚拟机安装Win8 系统失败,提示"shsucdx can't install"

Centos 7.0 编译安装LAMP(Linxu+apache+mysql+php)之源码安装php (三)

PHP简介: PHP(外文名:PHP: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域.PHP 独特的语法混合了C.Java.Perl以及PHP自创的语法.它可以比CGI或者Perl更快速地执行动态网页.用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML(标准通用标记语言下的一个应用)文档中去执行,执行效率比完全生成HTML标

zabbix 3.0 编译安装到 oracle 数据库中 &nbsp; centos 6.6

基于centos 6.6  编译安装zabbix 3.0  数据存储到oracle中 因为服务器多了以后, 依赖mysql为后台的zabbix 性能明显会下降.那么我们将其安装到oracle中,以下是安装文档. 基础 : zabbix3.0.1 版本, php5.5     centos 6.6   oracle 11.204 安装httpd yum install httpd. 1. 要用 php55. https://oss.oracle.com/projects/php/files/EL6