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
#include
#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: test1.c(15), 0x80517b4 was freed from test1.c(14)
...
unfreed: 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: 2
l)argest memory usage : 1024
t)otal of all alloc() calls: 1024
u)nfreed bytes totals : 512
memwatch 为您显示真正导致问题的行。如果您释放一个已经释放过的指针,它会告诉您。对于没有释放的内存也一样。日志结尾部分显示统计信息,包括泄漏了多少内存,使用了多少内存,以及总共分配了多少内存。

良好呼叫和不良呼叫背后的触发器
EDA上云,概伦电子携手鸿之微开启芯片设计加速度
音圈马达无人机被用于筑牢疫情输入防线
PLC就是逻辑控制吗?PLC的网络通信怎么样?
汽车电子领域或将是半导体产业最大舞台
Linux内存调试工具初探-MEMWATCH
荣耀Play体验 毫无疑问称得上一款优秀的旗舰手机
集睿致远CS5266 TYPEC to HDMI带PD+U3拓展坞方案
「2015新唐科技NuMicro单片机新产品应用研讨会」热烈报名中
Google宣布将其Messenger应用更名为Android Messages
阿斯塔纳航空计划使用A321LR飞机开通上海航线
自动驾驶汽车明年开始爆发 自动驾驶法规从北京开道
电力巡检机器人,以人工智能技术推动坚强电网建设
插件封装技术VS顶部散热封装技术
摩托罗拉型号“XT2041-1”通过FCC认证,6.3英寸加15W充电
相信科技,知识付费的明日独角兽
探析锂离子电池和新能源汽车产业发展趋势
厘清十四五新材料产业发展的战略要点
土壤微量元素检测设备的详细参数介绍以及应用领域
我国首次发射全天监测引力波电磁对应体的卫星