Valgrind 介绍

一、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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值