博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CentOS下安装Valgrind的方法
阅读量:6033 次
发布时间:2019-06-20

本文共 1866 字,大约阅读时间需要 6 分钟。

hot3.png

一、Valgrind安装

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

(1)下载最新的安装包

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

或者是输入命令:

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,输入命令:

cd valgrind-3.10.1

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

./autogen.sh

如果你碰到如下错误:aclocal: command not found

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

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

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

make;make install

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

      valgrind --version

  

二、测试代码:

#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检查:没有了内存泄漏和数组越界问题!

小结:
一、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

二、工程经验

对于写好的代码,想要检查是否存在内存问题,可以结合Coverity静态内存检查和Valgrind内存检测。注意:Coverity静态检测不能检测动态内存问题。

--------------------- 
作者:SoaringLee_fighting 
来源:CSDN 
原文:https://blog.csdn.net/soaringlee_fighting/article/details/77925402 
版权声明:本文为博主原创文章,转载请附上博文链接!

转载于:https://my.oschina.net/u/4000302/blog/3045578

你可能感兴趣的文章
【转载】SQL经验小记
查看>>
zookeeper集群搭建 docker+zk集群搭建
查看>>
Vue2.5笔记:Vue的实例与生命周期
查看>>
论JVM爆炸的几种姿势及自救方法
查看>>
联合体、结构体简析
查看>>
使用throw让服务器端与客户端进行数据交互[Java]
查看>>
java反射与代理
查看>>
深度分析Java的ClassLoader机制(源码级别)
查看>>
微服务架构选Java还是选Go - 多用户负载测试
查看>>
我的友情链接
查看>>
Javascript中的异步如何实现回调
查看>>
halcon算子介绍
查看>>
挖掘你不知道的windowsxp中的带宽潜能
查看>>
Software Engineering 招聘要求
查看>>
【转载】InstallAnyWhere自动化制作安装包的知识
查看>>
69、iSCSI共享存储配置实战
查看>>
文本编程
查看>>
乔布斯走了。你还期待苹果吗?
查看>>
优先级
查看>>
Tomcat与Web服务器、应用服务器的关系
查看>>