valgrind的说明使用和原理
编译
#gcc -g -o test test.c
内存检查
#valgrind --tool=memcheck --leak-check=yes --show-reachable=yes ./test
Memcheck 能够检测出内存问题,关键在于其建立了两个全局表。
- Valid-Value 表:
对于进程的整个地址空间中的每一个字节(byte),都有与之对应的 8 个 bits;对于 CPU 的每个寄存器,也有一个与之对应的 bit 向量。这些 bits 负责记录该字节或者寄存器值是否具有有效的、已初始化的值。
- Valid-Address 表
对于进程整个地址空间中的每一个字节(byte),还有与之对应的 1 个 bit,负责记录该地址是否能够被读写。
检测原理:
- 当要读写内存中某个字节时,首先检查这个字节对应的 A bit。如果该A bit显示该位置是无效位置,memcheck 则报告读写错误。
- 内核(core)类似于一个虚拟的 CPU 环境,这样当内存中的某个字节被加载到真实的 CPU 中时,该字节对应的 V bit 也被加载到虚拟的 CPU 环境中。一旦寄存器中的值,被用来产生内存地址,或者该值能够影响程序输出,则 memcheck 会检查对应的V bits,如果该值尚未初始化,则会报告使用未初始化内存错误。
valgrind的说明使用和原理相关推荐
- 【linux】Valgrind工具集详解(二):入门
一.使用valgrind 1.安装 安装超级简单: sudo apt-get install valgrind 2.使用 运行valgrind -h可以查看详细使用方法,命令格式如下: valgrin ...
- 用valgrind 检测内存错误
用valgrind 检测内存错误 ---------------------------------------- 前言: -------------------------------------- ...
- LINUX平台高级调试和优化(2018上海站)
关于LINUX的资料浩如烟海,学习LINUX的途径也有很多,如何才能在比较短的时间里获得一个比较大的提升呢?<软件调试高级研习班>将与各位LINUX爱好者共同探索这个问题的最佳答案.本着生 ...
- Linux平台高级调试和优化
关于Linux的资料浩如烟海,学习Linux的途径也有很多,如何才能在比较短的时间里获得一个比较大的提升呢?<软件调试高级研习班2018庐山秀峰站>将与各位Linux爱好者共同探索这个问题 ...
- valgrind的使用、原理
valgrind支持的工具:memcheck addrcheck cachegrind Massid helgrind Callgrind 运行时必须指明想用的工具,如果省略工具名,默认运行mem ...
- 【linux】Valgrind工具集详解(十):SGCheck(检查栈和全局数组溢出)
一.概述 SGCheck是一种用于检查栈中和全局数组溢出的工具.它的工作原理是使用一种启发式方法,该方法源于对可能的堆栈形式和全局数组访问的观察. 栈中的数据:例如函数内声明数组int a[10],而 ...
- 【linux】Valgrind工具集详解(六):使用Valgrind gdbserver和GDB调试程序
一.概述 在Valgrind下运行的程序不是由CPU直接执行的.相反,它运行在Valgrind提供的合成CPU上.这就是调试器在Valgrind上运行时无法调试程序的原因. 二.快速入门 在使用Mem ...
- 内存泄漏的定位与排查:Heap Profiling 原理解析
系统长时间运行之后,可用内存越来越少,甚至导致了某些服务失败,这就是典型的内存泄漏问题.这类问题通常难以预测,也很难通过静态代码梳理的方式定位.Heap Profiling 就是帮助我们解决此类问题的 ...
- c linux new使内存耗尽_C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...
最新文章
- Web 第二阶段Java Script (续)
- 删除文件夹里的图片,打印删除日志
- dotcpp1115 DNA-打印图案
- mysql 安装部署
- php 编译 sass,如何在Symfony 3中使用纯PHP编译SASS(scss)
- 我的世界服务器权限组权限修改器,我的世界op权限组指令是什么 op权限组指令汇总...
- ctbs mysql_C/C++/Java
- 高德地图根据经纬度获取详细地址
- NShape(开源矢量图形编辑器) 基本功能开发(一)
- 【学术】分享几种论文写作神器,提高你的写作效率
- Linux磁盘的格式化
- Android中的常用控件之进度条(ProgressBar)
- PostMan测试http请求
- DeFi保险协议InsurAce.io宣布与Mushrooms Finance达成战略合作为其平台用户提供智能合约安全相关保险服务
- 面试官谈游戏开发入行--选择
- Wav ,flac,mp3,ogg 等的区别
- PS实战操作之滤镜、通道
- Vue-cli构建步骤
- 端口波特率有专门测试软件,波特率检查工具
- Android - Adapter 适配器
热门文章
- .NET零基础入门06:面向对象入门
- javascript TODO
- C++中public protected private关键字
- Dockefile CentOS SSH 服务的实现
- OCS 企业版图解详细部署
- 《智能家居产品 从设计到运营》——第2章 技术搭台——与智能家居相关的技术...
- Microsoft Azure Express Route (专线直连)到云端数据中心(2)
- linux内核编译练习
- 改善WPF应用程序性能的10大方法(转)
- 蚂蚁金服核心技术:百亿特征实时推荐算法揭秘