在VS中可以用VLD检测是否有内存泄露,可以参考http://blog.csdn.net/fengbingchun/article/details/44195959,下面介绍下Ubuntu中内存泄露检测工具Valgrind的使用。

Valgrind目前最新版本是3.11.0, 可以从http://www.valgrind.org/ 通过下载源码进行编译,也可以通过命令直接安装。

Valgrind是一个开源软件,它的Lisence是GPLv2。它用于Linux(支持 x86, amd64,arm, ppc, mip, etc. 架构)平台,对C/C++程序进行内存调试和代码剖析,它是帮助程序员寻找程序里的bug和改进程序性能的工具。

Valgrind有多个工具,包括Memcheck、Cachegrind、Callgrind、Helgrind、DRD、Massif、DHAT、SGCheck、BBV:

1.        Memcheck:主要检查的程序错误包括,(1)、使用未初始化的内存;(2)、读写已经释放了的内存;(3)、使用超过malloc分配的内存空间;(4)、对堆栈的非法访问;(5)、申请的空间是否有释放;(6)、malloc/free/new/delete申请和释放内存的匹配;(7)、src和dst指针的重叠;(8)、将无意义的参数传递给系统调用。

2.        Cachegrind:它是一个cache剖析器,它模拟CPU中的一级缓存I1,D1和L2二级缓存,能够精确地指出程序中cache的丢失和命中。如果需要,它还能够为我们提供cache丢失次数,内存引用次数,以及每行代码、每个函数、每个模块,整个程序产生的指令数。这对优化程序有很大的帮助。

3.        Callgrind:检测程序代码的运行时间和调用过程,以及分析程序性能。

4.        Helgrind:它主要用来检查多线程程序中出现的竞争问题。Helgrind寻找内存中被多个线程访问,而又没有加锁的区域,这些区域往往是线程之间失去同步的地方,而且会导致难以发掘的错误。Helgrind实现了名为”Eraser”的竞争检测算法,并做了进一步改进,减少了报告错误的次数。

5.        DRD:用于分析多线程,与Helgrind类似,但是用不同的分析技术,可用检测不同的问题。

6.        Massif:堆栈分析器,它能够测量程序在堆栈中使用了多少内存,告诉我们堆块,堆管理块和栈的大小。Massif能帮助我们减少内存的使用,在带有虚拟内存的系统中,它还能够加速我们程序的运行,减少程序停留在交换区中的几率。

7.        DHAT:另一个堆检测工具,帮助了解代码段的生命周期、利用率、效率规划。

8.        SGCheck:检测栈和全局数组溢出的实验性工具,与Memcheck互补使用。

9.        BBV:通过SimPoint分析工具产生基本块向量。

Valgrind工具的更详细用法可以参见源码中的docs/index.pdf用户手册。

用法:$ valgrind [options] prog-and-args

常用选项说明:

(1)、--help:显示帮助信息;

(2)、--version:显示valgrind版本;

(3)、--tool=<name>:运行valgrind中名为toolname的工具,默认memcheck,还可以为cachegrid、drd、lackey、callgrind、helgrind、massif等;

(4)、--quiet:安静地运行,只打印错误信息;

(5)、--verbose:更详细的信息,增加错误数统计;

(6)、--trace-childer=no|yes:跟踪子线程;

(7)、--track-fds=no|yes:跟踪打开的文件描述;

(8)、--time-stamp=no|yes:增加时间戳到Log信息;

(9)、--log-fd=<number>:输出Log信息到文件描述符;

(10)、--log-file=<file>:输出Log信息到指定的文件;

(11)、--xml=yes:将错误信息以xml格式输出,只有memcheck可用;

(12)、--xml-file=<file>:XML输出到指定文件;

(13)、--error-limit=no|yes:如果错误太多,则停止显示新错误;

(14)、--error-exitcode=<number>:如果发现错误,则返回错误代码;

(15)、--leak-check=no|summary|full:对发现的内存泄露给出的信息级别,只有memcheck可用。

安装Valgrind:

1.        通过命令直接安装:

sudo apt-get install valgrind

2.        通过源码安装:

(1)、从http://www.valgrind.org/downloads/current.html下载最新源码valgrind-3.11.0.tar.bz2 ;

(2)、解压缩valgrind-3.11.0.tar.bz2;

(3)、进入到valgrind-3.11.0目录;

(4)、依次执行:

./configure
make
sudo make install

使用举例:

测试代码test1.c如下,来自valgrid使用手册:

#include <stdlib.h>void f(voidd)
{int* x = malloc(10 * sizeof(int));x[10] = 0; // problem 1: heap block overrun// problem 2: memory leak -- x not freed
}int main(void)
{f();return 0;
}

生成test1执行文件,执行:

gcc -g -o test1 test1.c

使用valgrind,执行:

valgrind --tool=memcheck --leak-check=yes ./test1

运行结果如图:

参考文献:

1.      http://www.cnblogs.com/zhuyp1015/p/3901191.html

2.      http://blog.csdn.net/iccome/article/details/12708563

Ubuntu下内存泄露检测工具Valgrind的使用相关推荐

  1. linux 内存泄露检测工具——valgrind

    valgrind是linux下一个可用调试.查看内存泄露的工具,其官方网站:http://www.valgrind.org/ 使用时可用命令: valgrind -v  --leak-check=fu ...

  2. Linux环境下内存泄露检测

    linux下内存泄漏检测工具valgrind 该工具可以检测下列与内存相关的问题 : 未释放内存的使用 对释放后内存的读/写 对已分配内存块尾部的读/写 内存泄露 不匹配的使用malloc/new/n ...

  3. 几种内存泄露检测工具的比较

    概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,内存泄漏是常见的问题.当以前分配的一片内存不再需要使用或无法访问时,但是却 ...

  4. 精准 iOS 内存泄露检测工具

    MLeaksFinder:精准 iOS 内存泄露检测工具 发表于 2016-02-22   |   zepo   |   23 Comments 背景 平常我们都会用 Instrument 的 Lea ...

  5. Visual Studio内存泄露检测工具

    使用简介 在写程序的过程中,难免会遇到内存泄露的时候,这个时候如果手工查找内存泄露,不说方法没有通用的,就是真的要自己手工查找也是很耗时间和精力的.诚然,我们可以借助一些工具,而且我们还会惊奇地发现这 ...

  6. C++ 内存泄漏检测工具valgrind简单使用

    C++ 内存泄漏检测工具valgrind简单使用 目录 C++ 内存泄漏检测工具valgrind简单使用 valgrind安装 valgrind测试内存泄漏 valgrind安装 通过软件商店下载: ...

  7. ubuntu下安装c++检测工具perf

    ubuntu下安装c++检测工具perf sudo apt-get install linux-tools-common sudo apt-get install linux-tools-4.4.0- ...

  8. memwatch内存泄露检测工具

    工具介绍 官网 http://www.linkdata.se/sourcecode/memwatch/ 其功能如下官网介绍,挑选重点整理: 1. 号称功能: 内存泄露检测 (检测未释放内存, 即 动态 ...

  9. 内存泄露检测工具比较

    From: http://blog.163.com/zhuang_qianxin/blog/static/29765138201051092529107/ 1.     ccmalloc-Linux和 ...

最新文章

  1. python emoji 表情处理过滤
  2. 如何设置运行在Virtualbox内的Ubuntu虚拟机的静态ip地址
  3. impdp使用network_link导入
  4. Android Studio Debug按钮简介
  5. go 实现一个简单的UUID生成器
  6. 数据结构自学笔记(郝斌)
  7. 使用 Convex 进行状态管理的指南
  8. git via xkcd
  9. 外企office电话英语
  10. 对接海康威视ehome踩过的坑总结
  11. Ubuntu官网安装教程
  12. canva五角星空html,使用canvas绘制一个五角星
  13. 汶川大地震祭(新京报【逝者特刊】卷首语)——转载
  14. 目标跟踪之LTMU:High-Performance Long-Term Tracking with Meta-Updater环境配置及代码运行
  15. labelImg的汉化与打包
  16. 朴素贝叶斯 分类算法——代码简洁
  17. 一些非主流搜索引擎的优化
  18. QMUI全局样式配置
  19. Kevin Mitnick
  20. 伯恩斯新情绪疗法学习笔记

热门文章

  1. 读自动驾驶激光雷达物体检测技术(Lidar Obstacle Detection)(2):点云滤波FilterCloud()函数
  2. FPGA(1)基础入门 -- 按键控制led灯
  3. 1 字节的 utf-8 序列的字节 1 无效_字节码文件结构详解
  4. coreldraw水涟漪怎么做_凉皮调料水的做法 调凉皮的调料水怎么做
  5. eclipse保存自动组织导入、删除不必要的导入、格式化代码
  6. C和C++混合编程的Makefile的编写!
  7. Blender多米诺骨牌动画学习教程 The Impossible Domino Run in Blender
  8. 站在历史的长河中做农活
  9. 轻量级git服务器 Gogs git 服务器搭建
  10. NSwagStudio for Swagger Api