Linux C 編程記憶體泄露檢測工具(二):memwatch

來源:互聯網
上載者:User

標籤:des   style   http   io   使用   ar   檔案   sp   div   

Memwatch簡單介紹

在三種檢測工具其中,設定最簡單的算是memwatch,和dmalloc一樣,它能檢測未釋放的記憶體、同一段記憶體被釋放多次、位址存取錯誤及不當使用未分配之記憶體地區。請往http://www.linkdata.se/sourcecode.html下載最新版本號碼的Memwatch。

安裝及使用memwatch

非常幸運地,memwatch根本是不須要安裝的,由於它僅僅是一組C程式碼,僅僅要在你程式中添?memwatch.h,編譯時間加上-DMEMWATCH -DMW_STDIO及memwatch.c就能使用memwatch,比如:

gcc -DMEMWATCH -DMW_STDIO test.c memwatch.c -o test

memwatch輸出結果

memwatch的輸出檔案名為memwatch.log,並且在程式運行期間,全部錯誤提示都會顯示在stdout上,假設memwatch未能寫入以上檔案,它會嘗試寫入memwatchNN.log,而NN介於01至99之間,若它仍未能寫入memwatchNN.log,則會放棄寫入檔案。

我們引用第一篇(mtrace)中所使用過的有問題的代碼:

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <memwatch.h>
    int main() {
        char *hello;

        setenv("MALLOC_TRACE", "output", 1);
        mtrace();
        if ((hello = (char *) malloc(sizeof(char))) == NULL) {
            perror("Cannot allocate memory.");
            return -1;
        }

        return 0;
    }

然後在shell中輸入下面編譯指令:

    gcc -DMEMWATCH -DMW_STDIO test.c memwatch.c -o test

memwatch.log的內容例如以下:

    ============= MEMWATCH 2.71 Copyright (C) 1992-1999 Johan Lindh =============

    Started at Sat Jun 26 22:48:47 2004

    Modes: __STDC__ 32-bit mwDWORD==(unsigned long)
    mwROUNDALLOC==4 sizeof(mwData)==32 mwDataSize==32


    Stopped at Sat Jun 26 22:48:47 2004

        unfreed: <1> test.c(9), 1 bytes at 0x805108c    {FE .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .}

    Memory usage statistics (global):
     N)umber of allocations made: 1
     L)argest memory usage      : 1
     T)otal of all alloc() calls: 1
     U)nfreed bytes totals      : 1

檔案指出,在test.c被運行到第9行時所分配的記憶體仍未被釋放,該段記憶體的大小為1 byte。

Memwatch使用注意

Memwatch的長處是無需特別配置,不需安裝便能使用,但缺點是它會拖慢程式的執行速度,尤其是釋放記憶體時它會作大量檢查。但它比mtrace和dmalloc多了 一項功能,就是能類比系統記憶體不足的情況,使用者僅僅需用mwLimit(long num_of_byte)函數來限制程式的heap memory大小(以byte單位)。

最具體的使用說明(包含長處缺點,執行原理等)已在README中列出,本人強烈建議各位讀者參考該檔案。

相關連結:

- Memwatch下載

Linux C 編程記憶體泄露檢測工具(二):memwatch

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.