C/C++内存检测工具Valgrind

内存检测Valgrind简介

Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,作者是获得过Google-O‘Reilly开源大奖的Julian Seward,

它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等,内存检测,

我们可以使用它的工具:Memcheck。

 

Valgrind 安装

方法 1.  valgrind官网:http://valgrind.org下载

方法 2.  Ubuntu  sudo apt-get install valgrind

Memcheck检测范围:

用来检测c/c++程序中出现的内存问题,所有对内存的读写都会被检测到,一切对malloc()/free()/new/delete的调用都会被捕获。

所以,它能检测以下问题:

1) 对未初始化内存的使用;

2) 读/写释放后的内存块;

3) 读/写超出malloc等分配的动态内存范围;

4)读/写不适当的栈中内存块;

5)内存泄漏,指向一块内存的指针永远丢失;

6)不正确的malloc/free或new/delete匹配;

7)memcpy()相关函数中的dst和src指针重叠问题。

Memcheck 检查步骤及注意事项

1)在编译程序的时候打开调试模式(gcc编译器的-g选项),以便显示行号,编译时去掉-O1 -O2等优化选项;检查的是C++程序的时候,考虑加上选项: -fno-inline ,这样它函数调用链会很清晰

2)执行:valgrind --tool=memcheck --leak-check=full --log-file=./log.txt  ./YourProgram

3)程序运行结束,查看 log.txt 中的结果。

结果分析

Valgrind(memcheck)包含这7类错误,黑体为一般的错误提示:

1)illegal read/illegal write errors    非法读取/非法写入错误

2)use of uninitialised values        使用未初始化的区域

3)use of uninitialised or unaddressable values in system calls 系统调用时使用了未初始化或不可寻址的地址

4)illegal frees   非法的释放

5)when a heap block is freed with an inappropriate deallocation function 分配和释放函数不匹配

6)overlapping source and destination blocks  
源和目的内存块重叠

7)memory leak detection    内存泄漏检测

7.1 Still reachable

内存指针还在还有机会使用或者释放,指针指向的动态内存还没有被释放就退出了

7.2 Definitely lost

确定的内存泄露,已经不能够访问这块内存

7.3 Indirectly lost

指向该内存的指针都位于内存泄露处

7.4 Possibly lost

可能的内存泄露,仍然存在某个指针能够访问某块内存,但该指针指向的已经不是该内

  存首位置
      7.5 Suppressed  某些库产生的错误不予以提示,这些错误会被统计到suppressed项目

原文地址:https://www.cnblogs.com/wangkeqin/p/9226686.html

时间: 2024-10-29 12:03:32

C/C++内存检测工具Valgrind的相关文章

【调试】Linux下超强内存检测工具Valgrind

[调试]Linux下超强内存检测工具Valgrind 内容简介 Valgrind是什么? Valgrind的使用 Valgrind详细教程 1. Valgrind是什么? Valgrind是一套Linux下,开放源代码(GPLV2)的仿真调试工具的集合.Valgrind由内核(core)以及基于内核的其他调试工具组成. 内核类似于一个框架(framework),它模拟了一个CPU环境,并提供服务给其他工具:而其他工具则类似于插件 (plug-in),利用内核提供的服务完成各种特定的内存调试任务.

linux下内存泄露检测工具Valgrind

日前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用看看. Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它的主要作者是获得过Google-O'Reilly开源大奖的Julian Seward,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等.Valgrind可以

Unix下C程序内存泄漏检测工具Valgrind安装与使用

Unix下C程序内存泄漏检测工具Valgrind安装与使用 Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Google-O'Reilly开源代码奖. Valgrind遵守GNU通用公共许可证条款,是一款自由软件. 官网 http://www.valgrind.org 下载与安装 #wget http://www.valgrind.org/downlo

linux实用技巧:检测内存泄漏工具Valgrind

1.Valgrind简介 1.在我们编写C/C++的时候,最常见的错误之一就是内存泄露,这样的问题其实跟程序员的编程习惯密不可分.如果你在申请内存空间之后能够马上在合适的位置释放内存.会极大程度的避免内存泄漏的情况.但是人非圣贤,孰能无过.有时候我们确实忘记释放内存而导致了比较严重的错误,所以这个时候我们需要借助valgrind这个工具来判断内存泄漏. Valgrind 是一款 Linux下(支持 x86.x86_64和ppc32)程序的内存调试工具,它可以对编译后的二进制程序进行内存使用监测(

linux下内存泄露检测工具Valgrind介绍

目前在linux开发一个分析实时路况的应用程序,在联合测试中发现程序存在内存泄露的情况. 这下着急了,马上就要上线了,还好发现了一款Valgrind工具,完美的解决了内存泄露的问题. 推荐大家可以使用看看. Valgrind是运行在Linux上一套基于仿真技术的程序调试和分析工具,它的主要作者是获得过Google-O'Reilly开源大奖的Julian Seward,它包含一个内核──一个软件合成的CPU,和一系列的小工具,每个工具都可以完成一项任务──调试,分析,或测试等.Valgrind可以

Android 内存泄露总结(附内存检测工具)

https://segmentfault.com/a/1190000006852540 主要是分三块: 静态储存区:编译时就分配好,在程序整个运行期间都存在.它主要存放静态数据和常量. 栈区:当方法执行时,会在栈区内存中创建方法体内部的局部变量,方法结束后自动释放内存. 堆区:通常存放 new 出来的对象.由 Java 垃圾回收器回收. 栈与堆的区别 栈内存用来存放局部变量和函数参数等.它是先进后出的队列,进出一一对应,不产生碎片,运行效率稳定高.当超过变量的作用域后,该变量也就无效了,分配给它

内存泄露检测工具Valgrind

内存泄露简介 什么是内存泄漏 内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因,程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果. 内存泄漏缺陷具有隐蔽性.积累性的特征,比其他内存非法访问错误更难检测.因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷.此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃. 内存泄露产生的方式 以产生的方式来分类,内存泄漏可以分

Android内存优化9 内存检测工具3 MAT比Menmery Monitor更强大

在Android性能优化第(一)篇---基本概念中讲了JAVA的四大引用,讲了一下GCRoot,第二篇Memory Monitor检测内存泄露仅仅说了Menmery Monitor的使用,这篇博客谈一下MAT来寻找内存泄露,相对来说,Memory Monitor没有MAT强大,但是在开始介绍MAT之前,上两篇没有说清楚的问题先说一下. GC回收对可回收对象的判定什么样的对象是可以被回收的?当然是GC发现通过任何referencechain(引用链)无法访问某个对象的时候,该对象即被回收.名词GC

Visual Leak Detector 2 2 3 Visual C++内存检测工具

Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显示导致内存泄露的完整内存分配调用堆栈. 主页地址:http://vld.codeplex.com/ 旧版地址:http://www.codeproject.com/Articles/9815/Visual-Leak-Detector-Enhanced-Memory-Leak-Detectio 下载Vis