项目地址: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文件中的两个接口malloc和free

/* 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反馈

【MLA】一种内存泄漏分析方法的更多相关文章

  1. Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法

    Investigating Your RAM Usage In this document Interpreting Log Messages                 内存分析日志中各消息的含 ...

  2. Android 内存泄漏分析与解决方法

    在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...

  3. Chrome JS内存泄漏排查方法(Chrome Profiles)

     原文网址:http://blog.csdn.net/kaitiren/article/details/19974269 JS内存泄漏排查方法(Chrome Profiles)   Google Ch ...

  4. Java内存泄漏分析与解决方案

    Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历 ...

  5. Android内存泄漏分析及调试

    尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/13017999 此文承接我的另一篇文章:Android进程的内存管理分析 首先 ...

  6. Java内存泄漏分析系列之五:常见的Thread Dump日志案例分析

    原文地址:http://www.javatang.com 症状及解决方案 下面列出几种常见的症状即对应的解决方案: CPU占用率很高,响应很慢 按照<Java内存泄漏分析系列之一:使用jstac ...

  7. Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析

    原文地址:http://www.javatang.com 一个典型的thread dump文件主要由一下几个部分组成: 上图将JVM上的线程堆栈信息和线程信息做了详细的拆解. 第一部分:Full th ...

  8. Android内存泄漏分析实战

    内存泄漏简单介绍 java能够保证当没有引用指向对象的时候,对象会被垃圾回收器回收.与c语言自己申请的内存自己释放相比,java程序猿轻松了非常多.可是并不代表java程序猿不用操心内存泄漏.当jav ...

  9. (转)Android内存泄漏分析及调试

      http://blog.csdn.net/gemmem/article/details/13017999 此文承接我的另一篇文章:Android进程的内存管理分析  首先了解一下dalvik的Ga ...

  10. 内存泄漏分析工具tMemMonitor (TMM)使用简介

    C/C++由于灵活.高效的优点一直以来都是主流的程序设计语言之一,但是其内存的分配与释放均由程序员自己管理,当由于疏忽或错误造成程序未能释放不再使用的内存时就会造成内存泄漏.在大型.复杂的应用程序中, ...

随机推荐

  1. 数字孪生和VR结合能够为自身带来怎样的改变?

    随着科技的不断发展,数字孪生和虚拟现实(VR)这两个前沿技术正在逐渐融合,为各行各业带来了前所未有的改变. 数字孪生技术本身已经可以高度还原现实世界,而VR技术则能通过头戴式设备,让用户沉浸在这个虚拟 ...

  2. pytest框架学习-标签@pytest.mark.

    标签 自定义标签(区分大小写) 可以标记测试用例,对测试用例进行分组,有利于对测试用例进行筛选. 比如:给用例打标为API,代表接口自动化的用例,打标方法为@pytest.mark.API,打标后,需 ...

  3. 梳理Langchain-Chatchat-UI接口文档

      在 Langchain-Chatchat v0.1.17 版本及以前是有前后端分离的 Vue 项目的,但是 v0.2.0 后就没有了.所以本文使用的是 Langchain-Chatchat v0. ...

  4. Ubuntu图形界面root登录“sorry, that didn't work please

    https://blog.51cto.com/u_14757092/2484490 ssh登录主机执行下vim /etc/pam.d/gdm-autologin 注释行 "auth requ ...

  5. Mybatis源码4 Cache的实现和其原理

    Mybatis CachingExecutor, 二级缓存,缓存的实现 一丶二级缓存概述 上一章节,我们知道mybaits在构造SqlSession的时候,需要让SqlSession持有一个执行器,如 ...

  6. 18、Scaffold 布局组件

    Scaffold 是一个非常重要的布局组件,它提供了一个常见的应用程序结构布局,包含了许多基础的 UI 元素和交互方式. Scaffold 组件主要由以下几个部分组成: AppBar:用于显示在页面顶 ...

  7. SQL Server系列:系统函数之字符串函数

    1.ascii()  :返回ascii码 --返回ascii码 select ascii('a') go 2.char() :返回ascii对应的字符 --返回ascii对应的字符 select ch ...

  8. C# 创建Excel气泡图

    气泡图(Bubble Chart)是可用于展示三个变量之间的关系.通过绘制x 值, y 值和大小值即可确定图表中气泡的坐标及大小.下面通过后端C#代码及VB.NET代码展示如何来实现在Excel中创建 ...

  9. 解析数仓lazyagg查询重写优化

    摘要:本文对Lazy Agg查询重写优化和GaussDB(DWS)提供的Lazy Agg重写规则进行介绍. 本文分享自华为云社区<GaussDB(DWS) lazyagg查询重写优化解析[这次高 ...

  10. Scala Http请求工具类

    import java.io.IOException import java.util import org.apache.http.client.ClientProtocolException im ...