會員控制臺 會員登入 會員註冊 最後更新 進階搜尋 會員投稿 登出
香港IT網為您提供最新最全面的IT技術資訊,是您學電腦的好地方。 設為首頁
收藏本站
留言給我
  IT首頁 | 作業系統 | 軟體教學 | 硬體頻道 | 網絡頻道 | 防黑技術 | 網頁設計 | 程式設計 | 圖形圖像 | 數碼&遊戲
| 加解密技術 | IT論壇
當前線上:26 人
作業系統
軟體教學
硬體頻道
網絡頻道
防黑技術
網頁設計
程式設計
圖形圖像
數碼&遊戲
加解密技術
香港IT網 / 作業系統 / Unix/Linux / 關於Linux作業系統記憶體洩漏的檢查方法
關於Linux作業系統記憶體洩漏的檢查方法
2008-03-23          點選: 298
關於Linux作業系統記憶體洩漏的檢查方法

1. 在需要記憶體洩漏檢查的代碼的開始調用void mtrace(void) (mcheck.h? 有聲明). mtracemalloc等函數安裝hook, 用於記錄記憶體分配資訊.在需要記憶體洩漏檢查的代碼的結束調用void muntrace(void).

 

 

    注意: 一般情況下不要調用muntrace, 而讓程式自然結束. 因為可能有些釋放記憶體代碼要到muntrace之後才執行.

 

 

    2. debug模式編譯被檢查代碼(-g-ggdb)

 

 

    3. 設定環境變數MALLOC_TRACE為一檔案名, 這一檔將存有記憶體分配資訊.

 

 

    4. 執行被檢查程式, 直至結束或muntrace被調用.

 

 

    5. mtrace命令解析記憶體分配Log($MALLOC_TRACE)

 

    (mtrace foo $MALLOC_TRACE, where foo is the executible name)

 

    如果有記憶體洩漏, mtrace會輸出分配洩漏

 

    記憶體的代碼位置,以及分配數量.

 

 

    附加說明

 

 

    1. 可以將mtrace, muntrace放入信號處理函數(USR1, USR2), 以動態地進行記憶體洩漏檢查控制.

 

 

    2. mtrace是個perl代碼, 如果你對符號位址與代碼文本的轉換感興趣, 可以讀一下.

 

 

    3. again, 儘量不要用muntrace()

 

 

    For C++ Leak:

 

 

    檢查記憶體洩漏的方法除glibc提供外;還可以試試一些專用的程式。

 

 

    很奇怪,redhat 9 居然不帶mtrace perl腳本,只好下載gcc源碼編譯了

 

    wget --passive-ftp ftp://rpmfind.net/linux/redhat/9 ... -2.3.2-11.9.src.rpm

 

    rpm -ivh glibc*.src.rpm

 

    cd /usr/src/redhat/SPECS/

 

    rpmbuild -ba glibc-9.spec

 

    cd /var/tmp/glibc-2.3.2-root/usr/bin/

 

    cp mtrace /usr/bin/

 

 

    調試方法如下:

 

    vi a.c

 

 

    1 #include

 

    2

 

    3 int main()

 

    4 {

 

    5 mtrace();

 

    6 malloc(10);

 

    7 malloc(16);

 

    8 return 0;

 

    9 }

 

 

    $gcc -g a.c #記得編譯帶-g調試選項

 

    $export MALLOC_TRACE=a.log

 

    $./a.out

 

    $unset MALLOC_TRACE #記得執行完後unset變數,否則可能執行其他命令可能覆蓋log

 

    $mtrace a.out a.log

 

    Memory not freed:

 

    -----------------

 

    Address Size Caller

 

    0x09b08378 0xa at /XXX/a.c:6

 

    0x09b08388 0x10 at /XXX/a.c:7

 

    可以看到,會顯示未釋放動態空間的代碼具體位置。

責任編輯: 風隨行
發表評論 查看評論 加入收藏 Email給朋友 列印本文
如果你想對該文章評分, 請先登陸, 如果你仍未注冊,請點擊注冊鏈接注冊成為本站會員.
平均得分 0, 共 0 人評分
1 2 3 4 5 6 7 8 9 10
Copyright © 2004-2007 香港IT網 All rights reserved. 站長:風隨行
本站所刊登的各種新聞資料和各種專題專欄資料大部分為網上收集
如果你認為侵犯了你的版權,請通知我們,我們馬上刪除。 Email:info@hkitn.com