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

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