linux memwatch的內存檢測-double-free

1 memwatch是什麼?
  memwatch是C語言的內存檢測器。除了檢測內存的功能外,它同樣可以做其它的一些事情,而我們主要還是在於講述它的基本功能。如果你真的想要知道所有相關的具體細節,可詳細查看頭文件memwatch.h以及源代碼。那裏面有具體且詳細的註釋說明。
它使用C於處理器的功能,memwatch使用它自己定義的功能函數取代所有在你的程序中用ANSI C定義的內存分配函數,memwatch的內存分配函數包含了了所有的分配記錄信息。
2 memwatch功能
 a.它主要有基本的內存管理函數
   mwMalloc()
   mwFree()
   mwCalloc()
   mwRealloc()
 b.MemWatch能夠檢測的功能包括
        雙重釋放(double-free)、
        錯誤釋放(erroneous free)、
        內存泄漏(unfreed memory)、
        溢出(Overflow)、
        下溢(Underflow)等
        而目前我們只針對double-free進行了驗證;
  對於unfreed功能,需要在主程序結束前添加CHECK()函數進行檢查,這一點嵌入式系統並不特別適用,因此,在強行關閉程序時有可能會出現大量的unfreed信息,請忽略。
  使用MemWatch功能需要在待檢測源文件中引用memwatch.h,若沒有添加有可能出現野指針(wild-free)信息;如果申請內存時使用了malloc而釋放內存時使用了mwfree接口,有可能會出現錯誤釋放(wild-free)信息,遇到wild-free現象時請先排除以上兩場景。

3 編譯
    當編譯時, 相讓memwatch起作用, 編譯是加上-DMEMWATCH
4 memwatch.log內容
    在正常操作的情況下,memwatch會創建一個名叫memwatch.log的文件。但有的時候,memwatch.log文件並不能被創建。此時,memwatch會嘗試創建命名類似memwatNN.log的文件,其中NN是01到99之間的數字。如果還是失敗,則沒有log文件。
    a、檢測啓動時間:
    如:
    Started at Thu Nov  1 14:56:31 2012
    Started at Thu Nov  1 14:56:31 2012
    b、狀態蒐集器的信息及宏定義信息,可忽略。
    如:
    __STDC__ 64-bit mwDWORD==(unsigned long
    mwROUNDALLOC==8 sizeof(mwData)==32 mwDataSize==32

    c、MemWatch捕獲的錯誤信息
    如:
    double-free: <1385> menuChannelSet.c(529), 0x11a4130 was freed from mwTest.c(781)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章