CentOS下安装Valgrind的方法

1、Valgrind安装
valgrind是一款用于内存调试、内存泄漏检测以及性能分析的软件开发工具。
在安装valgrind以前,要先安装autoconf和automake。您能够使用命令autoconf --version和automake --version检查这两个工具是否有安装。html

(1)下载最新的安装包数组

http://valgrind.org/downloads/current.htmlapp

或者是输入命令:工具

wget http://valgrind.org/downloads/valgrind-3.10.1.tar.bz2性能

(2)解压缩安装包,输入命令:开发工具

tar -jxvf valgrind-3.10.1.tar.bz2测试

(3)进入解压缩后生成的目录valgrind-3.10.1,输入命令:.net

cd valgrind-3.10.1调试

(4)运行./autogen.sh设置环境,输入命令:htm

./autogen.sh

若是你碰到以下错误:aclocal: command not found

则表示你须要安装autoconf和automake两个工具,请先查看“安装autoconf“和”安装automake“两个步骤。 

(5)运行configure文件,生成Makefile。

(6)编译并安装valgrind,输入命令:

make;make install

(7)检查安装是否成功:

      valgrind --version

  

2、测试代码:
#include <stdlib.h>
int* func(void)
{
   int* x = malloc(10 * sizeof(int));
   x[10] = 0;  //问题1: 数组下标越界
}                  
 int main(void)
{
   int* x=NULL;
   x=func();
   //free(x);  
   x=NULL;
   return 0;   //问题2: 内存没有释放
 }
编译:g++ -g -o testdump main.cpp
Valgrind检查:valgrind --tool=memcheck --leak-check=yes ./testdump

说明:
Invalid write of size 4:表示数组越界写了4字节;
40 bytes in 1 blocks:表示因程序退出而发生内存泄露40字节;

修改Bug以后再进行valgrind检查:没有了内存泄漏和数组越界问题!


小结:
1、Valgrind 中包含的 Memcheck 工具能够检查如下的程序错误:
(1)使用未初始化的内存 (Use of uninitialised memory)
(2)使用已经释放了的内存 (Reading/writing memory after it has been free'd)
(3)使用超过malloc分配的内存空间(Reading/writing off the end of malloc'd blocks)
(4)对堆栈的非法访问 (Reading/writing inappropriate areas on the stack)
(5)申请的空间是否有释放 (Memory leaks – where pointers to malloc'd blocks are lost forever)
(6)malloc/free/new/delete申请和释放内存的匹配(Mismatched use of malloc/new/new [] vs free/delete/delete [])
(7)src和dst的重叠(Overlapping src and dst pointers in memcpy() and related functions)
(8)重复free

2、工程经验

对于写好的代码,想要检查是否存在内存问题,能够结合Coverity静态内存检查和Valgrind内存检测。注意:Coverity静态检测不能检测动态内存问题。 ---------------------  做者:SoaringLee_fighting  来源:CSDN  原文:https://blog.csdn.net/soaringlee_fighting/article/details/77925402  版权声明:本文为博主原创文章,转载请附上博文连接!

相关文章
相关标签/搜索