Linux内存调试工具初探-MEMWATCH
C 语言作为 Linux 系统上标准的编程语言给予了我们对动态内存分配很大的控制权。这种自由可能会导致严重的内存管理问题,可能导致程序崩溃或随时间的推移导致性能降级。
内存泄漏(即 malloc()
内存在对应的 free()
调用执行后永不被释放)和缓冲区溢出(例如对以前分配到某数组的内存进行写操作)是一些常见的问题,它们可能很难检测到。这一部分将讨论几个调试工具,它们极大地简化了检测和找出内存问题的过程
1. Memwatch简介
Memwatch是C语言的内存检测器。除了检测内存的功能外,它同样可以做其它的一些事情,而我们主要还是在于讲述它的基本功能。如果你真的想要知道所有相关的具体细节,可详细查看头文件memwatch.h以及源代码。
它使用C于处理器的功能,Memwatch使用它自己定义的功能函数取代所有在你的程序中用ANSI C定义的内存分配函数,Memwatch的内存分配函数包含了了所有的分配记录信息。
Memwatch可以在交叉编译后的目标板上运行。
2. Memwatch功能
(1) 主要有基本的内存管理函数
-mwMalloc()
-mwFree()
-mwCalloc()
-mwRealloc()
(2) MemWatch能够检测的功能包括
-双重释放(double-free)、
-错误释放(erroneous free)、
-内存泄漏(unfreed memory)、
-溢出(Overflow)、
-下溢(Underflow)
3. 编译
当编译时, 相让memwatch起作用, 编译是加上-DMEMWATCH
4. memwatch.log内容
在正常操作的情况下,memwatch会创建一个名叫memwatch.log的文件。但有的时候,memwatch.log文件并不能被创建。此时,memwatch会尝试创建命名类似memwatNN.log的文件,其中NN是01到99之间的数字。如果还是失败,则没有log文件。
5. 应用实例
清单 1. 内存样本(test1.c)
#include <stdlib.h> #include <stdio.h> #include "memwatch.h" int main(void) {char *ptr1;char *ptr2;ptr1 = malloc(512);ptr2 = malloc(512);ptr2 = ptr1;free(ptr2);free(ptr1); } |
清单 1 中的代码将分配两个 512 字节的内存块,然后指向第一个内存块的指针被设定为指向第二个内存块。结果,第二个内存块的地址丢失,从而产生了内存泄漏。
现在我们编译清单 1 的 memwatch.c。下面是一个 makefile 示例:
test1
gcc -DMEMWATCH -DMW_STDIO test1.c memwatch c -o test1 |
当您运行 test1 程序后,它会生成一个关于泄漏的内存的报告。清单 2 展示了示例 memwatch.log 输出文件。
清单 2. test1 memwatch.log 文件
MEMWATCH 2.67 Copyright (C) 1992-1999 Johan Lindh ... double-free: <4> test1.c(15), 0x80517b4 was freed from test1.c(14) ... unfreed: <2> test1.c(11), 512 bytes at 0x80519e4 {FE FE FE FE FE FE FE FE FE FE FE FE ..............} Memory usage statistics (global):N)umber of allocations made: 2L)argest memory usage : 1024T)otal of all alloc() calls: 1024U)nfreed bytes totals : 512 |
MEMWATCH 为您显示真正导致问题的行。如果您释放一个已经释放过的指针,它会告诉您。对于没有释放的内存也一样。日志结尾部分显示统计信息,包括泄漏了多少内存,使用了多少内存,以及总共分配了多少内存。
Linux内存调试工具初探-MEMWATCH相关推荐
- Linux 内存检测工具 memwatch的使用
Linux 内存检测工具 memwatch的使用 官网下载memwatch的源码 推荐使用地址http://www.linkdata.se/sourcecode/memwatch/ 打开文件,新建一个 ...
- Linux内存管理初探
linux内存是后台开发人员,需要深入了解的计算机资源.合理的使用内存,有助于提升机器的性能和稳定性.本文主要介绍linux内存组织结构和页面布局,内存碎片产生原因和优化算法,linux内核几种内存管 ...
- 别再说你不懂Linux内存管理了,10张图给你安排的明明白白!
来自:后端技术学堂 过去的一周有点魔幻,有印象的有三个新闻:天猫总裁绯闻事件,蘑菇街裁员,不可能打工的周某也放出来了.三件事,两件和互联网行业相关,好像外面的世界很是精彩啊!吃瓜归吃瓜,学习还是不能落 ...
- Linux内存管理(经典)
今天来带大家研究一下Linux内存管理.对于精通 CURD 的业务同学,内存管理好像离我们很远,但这个知识点虽然冷门(估计很多人学完根本就没机会用上)但绝对是基础中的基础,这就像武侠中的内功修炼,学完 ...
- Linux - 内存管理
引用文章 Linux阅马场 初探Linux内核态--通过proc文件系统作快速问题定位 linux通过meminfo 与 slab 定位内存泄漏 曾文斌: /proc/meminfo之谜完全揭秘 vm ...
- valgrind检测内存泄漏,gperftools,memwatch和性能优化Messy_Test
yum -y install valgrind 如何在windows使用valgrind_如何在windows下使用f2py_weixin_39621870的博客-CSDN博客 QNX下Valgri ...
- Linux内存泄漏检测方法总结
Linux内存泄漏检测方法总结 一.mtrace分析内存泄露 mtrace原理 设置日志生成路径 测试实例 日志 泄露分析 使用addr2line工具定位源码位置 使用mtrace工具分析日志信息 二 ...
- Linux内存背后的那些神秘往事
Linux内存背后的那些神秘往事 作者:大白斯基(公众号:后端研究所) 转自:https://mp.weixin.qq.com/s/l_YdpyHht5Ayvrc7LFZNIA 前言 大家好,我的朋友 ...
- linux内存管理之malloc
对于内核的内存管理,像kmalloc,vmalloc,kmap,ioremap等比较熟悉.而对用户层的管理机制不是很熟悉,下面就从malloc的实现入手.( 这里不探讨linux系统调用的实现机制. ...
最新文章
- 如何选择视觉CV光源颜色
- JavaScript 复习之数据类型
- 曙光i620c20用户手册_曙光天阔I620-G20服务器技术白皮书.pdf
- Windows 2000配置Web服务器
- linux的进程与库之间的通信两种方式
- Kafka 的生产者优秀架构设计
- python面向对象:小结
- 2019必学的10大顶级Python库!
- 物体检测object detection object recognition和coco数据集 动手学深度学习v2 pytorch
- FME转换器 正则字符查找(StringSearcher)
- 成品app直播源码,实现图形验证码
- Word批量生成软件
- 正确姿势使用arm-linux-androideabi-addr2line
- html5类库,javascript类库有哪些?
- 人力资源管理数据分析
- 形容词,名词记忆(三):ment, ent后缀常用词
- 抖音下载量超 Facebook;华为新款手机陷“绿屏”门;苹果又遭起诉 | 极客头条...
- 关于三极管,我忽视了两点
- 将word 转换为图片(word to pdf ->pdf to image)
- air dots 配对_Redmi AirDots可以作为iphone的合格伴侣吗?
热门文章
- C++_类和对象_C++继承_继承中的对象模型_占内存大小---C++语言工作笔记063
- MFC工作笔记0011---atoi的用法
- C#.Net工作笔记007---关于Lst深层复制_浅层复制_提供一个方法可以直接使用
- resnet 25 训练人脸识别
- 编程范式之栈的抽象操作
- 提交spark任务偶尔报错 org.apache.spark.SparkException: A master URL must be set in your configuration
- AddLinkedServer
- 杭电1869六度分离
- BCD与ASCII码互转-C语言实现
- java 配置tomcat_为tomcat配置java环境变量