記憶體除錯 - memwatch
2. 解壓後可以看到memwatch.c、memwatch.h、test.c等檔案;
2.1 首先執行源**中的事例程式,檢測是否捕捉到記憶體錯誤,具體步驟如下:
linux and other *nixes with gcc:
gcc -o test -dmemwatch -dmemwatch_stdio test.c memwatch.c
windows 95, windows nt with ms visual c++:
cl -dmemwatch -dmemwatch_stdio test.c memwatch.c
then simply run the test program.
./test
成功執行後,會看到乙個名為"memwatch.log" 的檔案,裡面記錄了記憶體洩漏的具體情況。
3. 上面事例執行成功後,就可以將測試自己的**了。
3.1 首先將memwatch.c、memwatch.h複製到被測**中。
3.2 將原始碼中每個檔案都包含memwatch.h;如果原始碼中的所有檔案都用到了乙個檔案,也可以將其新增到該檔案中。
3.3 重新編譯源**,並在gcc選項中使用 –dmemwatch,如果需要對出錯時進行控制,可以新增-dmemwatch_stdio 選項,此時除錯出錯時可以在標準輸出上看到"abort, retry,ignore?」
3.4 編譯成功後,執行程式!如果操作無誤,可以memwatch.log,裡面記錄了記憶體除錯的具體情況。
4. 容易出現的問題
4.1 在memwatch.h之後包含string.h時,編譯時提示strdup()出錯!
解決辦法:可以將string.h放置在memwatch.h之前;也可以修改memwatch.h,使其包含
string.h.
4.2 執行程式後,沒有出現memwatch.log檔案
解決辦法:在編譯時可能沒有定義memwatch;也可能是有些檔案沒有包含memwatch.h;檢視後解決
總結:memwatch 為您顯示真正導致問題的行。如果您釋放乙個已經釋放過的指標,它會告訴您。對於沒有釋放的記憶體也一樣。日誌結尾部分顯示統計資訊,包括洩漏了多少記憶體,使用了多少記憶體,以及總共分配了多少記憶體。
MEMWATCH 除錯動態庫2
1.root ubuntu wanghuan memwatch cat test.c include include include memwatch.h int main void 2.root ubuntu wanghuan memwatch cat makefile test gcc dmem...
使用memwatch跟蹤linux記憶體洩漏
參考 根據log可以查詢出申請了卻沒有釋放記憶體的行號。一 簡介 memwatch可以跟蹤程式中的記憶體洩漏和錯誤,能檢測雙重釋放 double free 錯誤釋放 erroneousfree 沒有釋放的記憶體 unfreed memory 溢位 overflow 下溢 underflow 等。解壓...
memwatch的使用(二)
2.3 分析日誌檔案 日誌檔案memwatch.log中包含的資訊主要有以下幾點 測試日期 狀態蒐集器 的資訊 使用 memwatch 的輸出函式或巨集 如trace等 的資訊。memwatch 捕獲的錯誤資訊 記憶體使用的全域性資訊統計,包括四點 1 分配了多少次記憶體 2 最大記憶體使用量 3 ...