linux 应用程序调试技术-堆内存调试工具

内存调试工具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文件,里边记录的就是内存检测结果。打开如下在这里插入图片描述
可以看到检测出了内存上溢、重复释放和未释放的情况,在文件的最后还统计了内存的使用情况。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章