首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Linux C 動態內存洩漏追蹤:mtrace/muntrace 實戰指南

     編輯:關於C語言

背景

C 無 GC,malloc 後忘 free 導致洩漏。GNU C 庫提供 mtrace/muntrace 追蹤工具。

使用步驟

  1. 設置環境變量 指向可寫文件:
    export MALLOC_TRACE=/path/to/trace.log
  2. 代碼中調用:
    #include <mcheck.h>
    #include <stdlib.h>
    
    int main() {
        mtrace();  // 安裝 malloc/realloc/free 追蹤鉤子
        int *p = malloc(sizeof(int));
        // 故意不 free
        return 0;  // 程序結束自動調用 muntrace(不建議手動調用,影響庫內部追蹤)
    }
  3. 編譯運行(需 -DDEBUG 條件編譯或直接鏈接)。
  4. 分析日誌:原始日誌機器可讀,使用 mtrace 命令轉換:
    mtrace ./a.out /path/to/trace.log

輸出示例

Memory not freed:
----------------------------
Address     Size  Caller
0x092a6378  0x4   at /root/tmp.c:9

明確指出第 9 行 malloc 未配對 free。

注意事項

  • mtrace 會追蹤整個進程(含 C 庫內部分配),輸出可能較多。
  • 不建議顯式調用 muntrace(),以免過早卸載鉤子漏報後續洩漏。
  • 僅適用於 GNU C 庫環境(Linux/glibc)。
  • 生產環境慎用,有性能開銷;建議配合 AddressSanitizer (-fsanitize=address) 綜合檢測。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved