一、Valgrind (https://www.valgrind.org/)

Valgrind 是一个框架,基于这个框架可以开发自定义的 分析程序 各个部分的独立工具。譬如:监测内存管理、线程运行,cache、堆内存的分配释放、线程锁、线程共享内存的非同步访问。当发生程序异常:内存泄漏、访问野指针、死锁、内存共享内存在未加锁时访问 等等  valgrind 工具 会 记录当前的调用栈、已经异常访问的代码函数。通过这个信息,可以节省时序bug、内存泄漏、野指针 几个小时的debug时间。

当前Valgrind工具包已经成熟的7个工具:

1个内存错误检测

2个线程错误监测

1个cache 和 branch-prediction profiler

1个call-graph generating cache and branch-prediction profiler

2个不同的heap profilers

其他的工具,正在开发工程中。。。

Valgrind  开源免费, 基于 GNU General Public License, version 2协议。

二、工具介绍

1. Memcheck

检测内存管理方面的问题。主要针对C和C++ 程序。memcheck 会监测内存每一次的读和写,会监测 malloc/new/free/delete的执行。so, memcheck 可以监测如下问题:

  • 访问不应该访问的内存(包括未分配的内存、已经释放的内存、堆之外的内存、不可访问的栈区)
  • 使用未初始化的值
  • 内存泄漏
  • 错误的内存释放(重复释放、释放没有申请的内存)
  • memcpy 或相关内存操作的函数,源和目的的地址重叠

上述现象发生时,memcheck 会记录 发生问题的代码行,函数调用栈信息。

memcheck 监测内存是在bit级别的。运行时 程序会比正常执行慢10-30倍。

2. Massif

Massif 是一个 堆内存分析工具。Massif 会执行周期性的堆内存分析,并记录下来。通过图表的形式 展示 堆的动态使用、程序的哪个部分执行最多的堆分配。 通过这个工具可以从内存使用的角度优化程序。

运行Massif时,程序比正常执行慢20倍。

3. DHAT

DHAT 解释程序如何使用了它的堆内存。DHAT 跟踪已经分配的块,并且观察每一个内存访问动作访问了哪块内存。DHAT会提供一个GUI界面展示分析的结果。

4. Helgrind

Helgrind 线程调试器,用来发现多线程的数据竞态访问。Helgrind 查找出 被多于一个线程(符合POSIX-X标准的线程)访问但没有用同步锁去锁(pthread_mutex_)的内存。

所以可以发现 未加锁导致的 时序问题。 (工具还处于实验阶段,大部分功能都ok,但是不排除错误)

5. DRD

DRD 也是一个C/C++程序的线程调试器。线程 需要符合 POSIX 标准。DRD可以监测到锁顺序异常的问题。

6. Cachegrind 和 Callgrind

分析l1、D1和L2 cache 访问相关。(当前工作接触的不多,不关注呢 ^_^)

7. Lackey, Nulgrind

没什么实际用途,为了测试和演示的目的。

8. 其他一些 处于实验阶段的工具

BBV、SGCheck ....

reference:

1. Valgrind home page:https://www.valgrind.org/

2. valgrind 开源代码:https://sourceware.org/git/?p=valgrind.git

3. valgrind 工具包:https://www.valgrind.org/info/tools.html

Valgrind 介绍相关推荐

  1. Valgrind使用介绍

    1. valgrind介绍 Valgrind是用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行某种类型的调试.分析或类似的任务,以帮助完善你的程序.Valgrind的架构是模块化的,所 ...

  2. valgrind 工具介绍和简单的使用

    1. valgrind介绍 Valgrind是用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行某种类型的调试.分析或类似的任务,以帮助完善你的程序.Valgrind的架构是模块化的,所 ...

  3. Valgrind memcheck介绍以及在海思himix410平台的安装使用

    Valgrind memcheck介绍以及在海思himix410平台的安装使用 概要 Valgrind 介绍 Memcheck 工具简介 内存泄漏类型细分 内存泄漏举例: definitely los ...

  4. Valgrind 使用方法

    Valgrind 介绍 Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析.你可以在它的环境中运行你的程序来监视内存的使用情 ...

  5. valgrind安装及使用

    valgrind安装及使用 valgrind介绍 Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行某种类型的 ...

  6. valgrind和Kcachegrind性能分析工具详解

    作者: zhuyong 原文地址 一.valgrind介绍 valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行 ...

  7. valgrind详细说明

    本文转自:http://qa.alibaba.com/?p=59 一.valgrind介绍 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核( ...

  8. linux注入内存泄露,Linux 内存泄露小结

    本文仅限记录自己的一次 内存泄露追踪小记. 可能并不十分适用与大家的情况.而且方法也并不是很smart.仅做记录,能提供个思路更好. 一. 要问调试程序遇到什么问题最头疼, 内存泄露肯定能排在前几名里 ...

  9. linux c 内存泄露 检查工具

    Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++.最近用到STL中的List编程,为了检测写的代码是否会发现内存泄漏,了解了一下相关的知识. 所有使用动态内存分配(dy ...

最新文章

  1. kail利用msf工具对ms17-010(永恒之蓝)漏洞入侵渗透Win7
  2. golang time包梳理
  3. 快捷关闭win8中的应用页面---解决方法
  4. Qt QMutexLocker_自动解锁的机制
  5. 如何创建一个注册表文件
  6. C++ vector 初始化大小
  7. 欧拉-拉格朗日方程(Euler -Lagrange equation)
  8. 华为USG防火墙通过nat64 ipv6用户访问内网ipv4服务(原创,转发请注明出处)
  9. UVM-入门实验2_uvm代码实现
  10. Openstack中用keypair生成和访问虚机的方法
  11. asp.net消除锯齿的办法
  12. 怎么删除win10的系统更新服务器,教你怎么永久删除Win10更新助手(Update Assistant)...
  13. 基于STM32单片机的篮球计时记分器proteus仿真原理图PCB
  14. html引入jquery库
  15. Int是如何转成String的
  16. 王道书P41 T22(单链表实现)
  17. IP地址归属地在线查询平台
  18. VMware虚拟机安装windows2008系统
  19. MATERIALISE_MAGICS_TOOLING_EXPERT_V2.1.1-LND
  20. 快应用安卓机进行真机调试(详细流程)

热门文章

  1. Android笔记(二十四):gradle写一个android12自动适配exported脚本,支持aab
  2. 专利侵权的情形有哪些
  3. ansible:unarchive模块解压报错
  4. 左耳朵耗子:软件开发这些年,我学会的道理和教训
  5. Windows更新出现8024402f错误代码的解决方法
  6. mysql explain extended_MySQL EXPLAIN extended
  7. IKAnalyzer2012FF + Lucene4.9 TokenStream contract violation: reset()/close() call missing
  8. flutter使用floor更新Dao文件报错问题解决(Conflicting outputs were detected and the build is unable to prompt for)
  9. 红米note4x linux,谁会用红米note2安装kali Linux
  10. Dlib库介绍(一)