內存調試工具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文件,裏邊記錄的就是內存檢測結果。打開如下
可以看到檢測出了內存上溢、重複釋放和未釋放的情況,在文件的最後還統計了內存的使用情況。