内存调试工具memwatch 使用介绍
段错误和内存错误是C语言编程中常见的问题,内存错误通常是指使用动态内存时出现的各种错误,比如内存溢出和缓冲区溢出等问题。
memwatch是一个开源的内存错误检测工具,它可以跟踪程序中的内存泄露和错误,并提供结果日志记录,能检测双重释放、错误释放、未释放、溢出等。memwatch并不是一个可以单独运行的程序,它提供一套实现动态内存管理、检测的代码,用它们来替换标准库中的相关函数。下载地址如下https://www.linkdata.se/sourcecode/memwatch/
使用实例
要使用memwatch需要完成以下3点
1、在代码中加入头文件memwatch.h
2、程序的代码与memwatch.c一起编译、链接
3、使用gcc编译器进行编译时要定义宏MEMWATCH、MEMWATCH_STDIO
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <unistd.h>
#include "memwatch.h"
int main(int argc, char *argv)
{
char *p;
p = malloc(512);
p = malloc(512);
p[512] = 1;
free(p);
free(p);
return 0;
}
makefile 如下
CC=gcc
CFLAGS=-DMEMWATCH -DMEMWATCH_STDIO
OBJ=main.o memwatch.o
edit:$(OBJ)
$(CC) -o $@ $(OBJ)
%.o:%.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY:clean
clean:
rm -rf *.o
编译完成运行程序后,会在当前目录下输出一个memwatch.log文件,里边记录的就是内存检测结果。打开如下
可以看到检测出了内存上溢、重复释放和未释放的情况,在文件的最后还统计了内存的使用情况。