Linux系统移植实验--内存调试
2016-11-07 14:23
302 查看
实验九 内存调试
【实验目的】段错误和内存错误是C语言编程经常遇到的问题,使用memwatch是由johan
lindh编写,是一个开发源代码C语言内存错误检测工具。能检测双重释放,错误释放,没有释放内存,溢出等等情况。
【实验环境】
1、 ubuntu 12.04发行版
2、 FS4412平台
3、 交叉编译器 arm-none-linux-gnueabi-gcc
【实验步骤】
1、 解压memwatch.-2.7.1.tar.gz,在解开的目录下添加代码memtest.c
#include <stdlib.h>
#include <stdio.h>
#include "memwatch.h"
int main(int argc,char **argv)
{
char *ptr1;
char *ptr2;
ptr1 = malloc(512);
ptr2 = malloc(512);
ptr1[512]= 'A';
ptr2 = ptr1;
free(ptr2);
free(ptr1);
return 0;
}
2、 修改 Makefile
Makefile文件为:
memtest:
$(CC) -DMEMWATCH -DMW_STDIO memtest.c
memwatch.c
5、运行make并在主机上执行a.out,执行后会生成一个记录文件memwatch.log,内容如下:
============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =========
Started at Thu Jan 1 00:08:33 1970
Modes: __STDC__ 32-bit mwDWORD==(unsigned long)
mwROUNDALLOC==4 sizeof(mwData)==32 mwDataSize==32
overflow: <3> memtest.c(12), 512 bytes alloc'd at <1> memtest.c(8)
double-free: <4> memtest.c(13), 0x1a1b4 was freed from memtest.c(12)
Stopped at Thu Jan 1 00:08:33 1970
unfreed: <2> test.c(9), 512 bytes at 0x1a3e4 {FE FE FE FE 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
//overflow: <3> memtest.c(12)缓冲区溢出,当程序执行到第12行free(ptr2)才检测到的;
512 bytes alloc'd at <1> memtest.c(8)
//表示出错缓冲区的大小为512字节,是在memtest.c的第8行分配的。很容易发现代码的ptr1[512]= 'A'出现错误。
double-free: <4> memtest.c(13), 0x1a7f4 was freed from memtest.c(12)
//double-free: <4> memtest.c(13)是一个双重释放的错误,表示程序执行到13行的时候才检测到。
0x1a7f4 was freed from memtest.c(12)
//表示首地址为 0x1a7f4的内存在12行已经被释放。
Stopped at Wed Dec 31 19:00:38 1969
unfreed: <2> test.c(9), 512 bytes at 0x1a3e4 {FE FE FE FE FE FE FE FE
//表示一块内存没有释放,表示这块内存是在memtest.c的第9行分配,大小为512字节,首地址为0x1a3e4 。
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
//表示未释放的内存
相关文章推荐
- Linux系统移植实验---内存调试
- 关于Linux 系统内存调试的几篇文章
- Linux系统内存错误产生的原因及调试方法
- Linux系统内存错误产生的原因及调试方法
- linux cpu 内存 硬盘 系统性能调试相关命令
- linux2.6移植+根文件系统实验手册
- Linux系统内存错误产生的原因及调试方法
- Linux系统内存错误产生的原因及调试方法
- linux 2.6内核+根文件系统的移植实验
- Linux系统内存错误产生的原因及调试方法
- 在连续两个平台的uboot和Linux系统移植过程中,在千兆网口调试这块都遇到了很大的麻烦。由于寄存器数量庞大,千兆网口MAC和PHY内部结构复杂,MAC和PHY接口种类多,千兆以太网驱动的调试成
- Linux系统内存错误产生的原因及调试方法(段错误|core dumped)
- Linux系统内存错误调试方法
- Linux系统内存错误产生的原因及调试方法
- linux-0.11调试教程 minix文件系统1.0 下篇(2)inode_table内存i节点表和目录 /etc/tty0
- 关于Linux 系统内存调试的几篇文章
- 实验四:掌握Linux系统的构建和调试方法
- Linux系统移植实验---SD卡驱动移植
- Linux系统内存错误产生的原因及调试方法(段错误|core dumped) 谢谢这篇文章的作者
- Linux系统移植实验---根文件系统制作