• 【MLA】一种内存泄漏分析方法


    项目地址:skullboyer/MLA (github.com)

    介绍

    MLA 即 Memory Leak Analyzer,是一个排查内存泄漏的分析器

    实现机制是在malloc时记录分配位置信息,在free时记录释放位置信息,通过两者计数作差可得是否存在泄漏

    快速开始

    你可以使用提供的脚本do.sh来快速使用本代码库

    可以使用./do.sh help命令

    -*- help -*-
    usage: ./do.sh [generate] [make] [exec] [clean] [help]
    [generate]: -g -G generate
    Example usage of the MLA mechanism
    $ ./do.sh -g MLA
    $ ./do.sh make
    Self-validation of MLA mechanisms
    $ ./do.sh -g SV
    $ ./do.sh make
    LOG mechanism implementation analysis
    $ ./do.sh -g LOG
    $ ./do.sh make
    Execute the program to view the results
    $ ./do.sh exec
    Remove unnecessary code
    $ ./do.sh clean

    如何使用

    你只需两步就可以开始使用了

    1、适配mla.h文件中的两个接口mallocfree

    /* MLA内部使用的内存管理接口 */
    #define MLA_MALLOC(size) malloc(size)
    #define MLA_FREE(addr) free(addr)
    /* 对外提供使用的内存泄漏检查的分配释放接口 */
    #define PORT_MALLOC(size) MlaMalloc(size, __FILENAME__, __func__, __LINE__)
    #define PORT_FREE(addr) MlaFree(addr, __FILENAME__, __func__, __LINE__)

    2、在你的代码初始化部分加入接口MlaInit,在查看内存泄漏信息的地方调用接口MlaOutput即可

    示例:

    通过自证清白来演示MLA的用法

    $ ./do.sh -g SV
    Generate a example version of the MLA file.

    执行上述命令后会生成一些文件,这些是MLA自证的测试文件

    $ ./do.sh make
    $ ./do.sh exec

    执行上述命令后会输出MLA的分析信息,借助Diff字段可以清晰看出有没有内存泄漏

    MLA Verbose部分可以看到详细的内存分配和释放信息,包括代码文件名、行数、函数以及分配大小、释放次数等信息

    -- SV_MlaOutput:
    * *
    ********************************************** Memory Leak Analyzer **********************************************
    * *
    * M L A N O N E *
    -- MlaOutput: *
    ********************************************** Memory Leak Analyzer **********************************************
    * *
    Caller Hash Malloc Free Diff
    sv_mla.c:316 SV_MlaMalloc 52f06d09 3 3 0
    sv_mla.c:214 MlaMallocRecorder 1239e656 1 1 0
    sv_mla.c:286 MlaFreeRecorder 49583dd0 2 2 0
    *%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% MLA Verbose %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*
    >1
    Caller Size Malloc Free Diff
    sv_mla.c:316 SV_MlaMalloc 12 3 3 0
    *----------------------------------------------------------------------------------------------------------------*
    |Verbose: malloc free |
    | 1. (12)B - [3] sv_mla.c:357 SV_MlaFree - [3] |
    *----------------------------------------------------------------------------------------------------------------*
    >2
    Caller Size Malloc Free Diff
    sv_mla.c:214 MlaMallocRecorder 104 1 1 0
    *----------------------------------------------------------------------------------------------------------------*
    |Verbose: malloc free |
    | 1. (104)B - [1] sv_mla.c:201 MlaDelItem - [1] |
    *----------------------------------------------------------------------------------------------------------------*
    >3
    Caller Size Malloc Free Diff
    sv_mla.c:286 MlaFreeRecorder 88 2 2 0
    *----------------------------------------------------------------------------------------------------------------*
    |Verbose: malloc free |
    | 1. (88)B - [2] sv_mla.c:153 MlaProcessFreeNode - [2] |
    *----------------------------------------------------------------------------------------------------------------*

    共同进步

    欢迎大家使用并issue反馈

  • 相关阅读:
    arm day2(9.15)数据操作指令,跳转指令,特殊功能寄存器指令,+XMind
    【版本控制工具一】Git 安装注册及使用
    《荒野大镖客》游戏emp.dll丢失的修复方法,快速解决找不到emp.dll问题
    2、浮动的用法特点,解决父元素高度塌陷解决
    【数模系列】01_聚类分析
    OpenHarmony开源软件供应链安全风险
    202206 集合 面试
    第十二次CCF计算机软件能力认证
    Arduino操作MPU6050模块
    Volcano 原理、源码分析(二)
  • 原文地址:https://www.cnblogs.com/skullboyer/p/17982038