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
Valgrind 介绍相关推荐
- Valgrind使用介绍
1. valgrind介绍 Valgrind是用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行某种类型的调试.分析或类似的任务,以帮助完善你的程序.Valgrind的架构是模块化的,所 ...
- valgrind 工具介绍和简单的使用
1. valgrind介绍 Valgrind是用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行某种类型的调试.分析或类似的任务,以帮助完善你的程序.Valgrind的架构是模块化的,所 ...
- Valgrind memcheck介绍以及在海思himix410平台的安装使用
Valgrind memcheck介绍以及在海思himix410平台的安装使用 概要 Valgrind 介绍 Memcheck 工具简介 内存泄漏类型细分 内存泄漏举例: definitely los ...
- Valgrind 使用方法
Valgrind 介绍 Valgrind是一个GPL的软件,用于Linux(For x86, amd64 and ppc32)程序的内存调试和代码剖析.你可以在它的环境中运行你的程序来监视内存的使用情 ...
- valgrind安装及使用
valgrind安装及使用 valgrind介绍 Valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行某种类型的 ...
- valgrind和Kcachegrind性能分析工具详解
作者: zhuyong 原文地址 一.valgrind介绍 valgrind是运行在Linux上的一套基于仿真技术的程序调试和分析工具,用于构建动态分析工具的装备性框架.它包括一个工具集,每个工具执行 ...
- valgrind详细说明
本文转自:http://qa.alibaba.com/?p=59 一.valgrind介绍 Valgrind是一套Linux下,开放源代码(GPL V2)的仿真调试工具的集合.Valgrind由内核( ...
- linux注入内存泄露,Linux 内存泄露小结
本文仅限记录自己的一次 内存泄露追踪小记. 可能并不十分适用与大家的情况.而且方法也并不是很smart.仅做记录,能提供个思路更好. 一. 要问调试程序遇到什么问题最头疼, 内存泄露肯定能排在前几名里 ...
- linux c 内存泄露 检查工具
Linux下编写C或者C++程序,有很多工具,但是主要编译器仍然是gcc和g++.最近用到STL中的List编程,为了检测写的代码是否会发现内存泄漏,了解了一下相关的知识. 所有使用动态内存分配(dy ...
最新文章
- kail利用msf工具对ms17-010(永恒之蓝)漏洞入侵渗透Win7
- golang time包梳理
- 快捷关闭win8中的应用页面---解决方法
- Qt QMutexLocker_自动解锁的机制
- 如何创建一个注册表文件
- C++ vector 初始化大小
- 欧拉-拉格朗日方程(Euler -Lagrange equation)
- 华为USG防火墙通过nat64 ipv6用户访问内网ipv4服务(原创,转发请注明出处)
- UVM-入门实验2_uvm代码实现
- Openstack中用keypair生成和访问虚机的方法
- asp.net消除锯齿的办法
- 怎么删除win10的系统更新服务器,教你怎么永久删除Win10更新助手(Update Assistant)...
- 基于STM32单片机的篮球计时记分器proteus仿真原理图PCB
- html引入jquery库
- Int是如何转成String的
- 王道书P41 T22(单链表实现)
- IP地址归属地在线查询平台
- VMware虚拟机安装windows2008系统
- MATERIALISE_MAGICS_TOOLING_EXPERT_V2.1.1-LND
- 快应用安卓机进行真机调试(详细流程)
热门文章
- Android笔记(二十四):gradle写一个android12自动适配exported脚本,支持aab
- 专利侵权的情形有哪些
- ansible:unarchive模块解压报错
- 左耳朵耗子:软件开发这些年,我学会的道理和教训
- Windows更新出现8024402f错误代码的解决方法
- mysql explain extended_MySQL EXPLAIN extended
- IKAnalyzer2012FF + Lucene4.9 TokenStream contract violation: reset()/close() call missing
- flutter使用floor更新Dao文件报错问题解决(Conflicting outputs were detected and the build is unable to prompt for)
- 红米note4x linux,谁会用红米note2安装kali Linux
- Dlib库介绍(一)