【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文件中的两个接口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】一种内存泄漏分析方法的更多相关文章
- Android内存管理(5)*官方教程:Logcat内存日志各字段含义,查看当前内存快照,跟踪记录内存分配,用adb查看内存情况时各行列的含义,捕获内存快照的3种方法,如何让程序暴漏内存泄漏的方法
Investigating Your RAM Usage In this document Interpreting Log Messages 内存分析日志中各消息的含 ...
- Android 内存泄漏分析与解决方法
在分析Android内存泄漏之前,先了解一下JAVA的一些知识 1. JAVA中的对象的创建 使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象 垃圾回收器回收非存活的对象,并释放对应的内 ...
- Chrome JS内存泄漏排查方法(Chrome Profiles)
原文网址:http://blog.csdn.net/kaitiren/article/details/19974269 JS内存泄漏排查方法(Chrome Profiles) Google Ch ...
- Java内存泄漏分析与解决方案
Java内存泄漏是每个Java程序员都会遇到的问题,程序在本地运行一切正常,可是布署到远端就会出现内存无限制的增长,最后系统瘫痪,那么如何最快最好的检测程序的稳定性,防止系统崩盘,作者用自已的亲身经历 ...
- Android内存泄漏分析及调试
尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/13017999 此文承接我的另一篇文章:Android进程的内存管理分析 首先 ...
- Java内存泄漏分析系列之五:常见的Thread Dump日志案例分析
原文地址:http://www.javatang.com 症状及解决方案 下面列出几种常见的症状即对应的解决方案: CPU占用率很高,响应很慢 按照<Java内存泄漏分析系列之一:使用jstac ...
- Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析
原文地址:http://www.javatang.com 一个典型的thread dump文件主要由一下几个部分组成: 上图将JVM上的线程堆栈信息和线程信息做了详细的拆解. 第一部分:Full th ...
- Android内存泄漏分析实战
内存泄漏简单介绍 java能够保证当没有引用指向对象的时候,对象会被垃圾回收器回收.与c语言自己申请的内存自己释放相比,java程序猿轻松了非常多.可是并不代表java程序猿不用操心内存泄漏.当jav ...
- (转)Android内存泄漏分析及调试
http://blog.csdn.net/gemmem/article/details/13017999 此文承接我的另一篇文章:Android进程的内存管理分析 首先了解一下dalvik的Ga ...
- 内存泄漏分析工具tMemMonitor (TMM)使用简介
C/C++由于灵活.高效的优点一直以来都是主流的程序设计语言之一,但是其内存的分配与释放均由程序员自己管理,当由于疏忽或错误造成程序未能释放不再使用的内存时就会造成内存泄漏.在大型.复杂的应用程序中, ...
随机推荐
- Date、正则表达式练习
Date.正则表达式练习 package com.guoba.date; import java.text.SimpleDateFormat; import java.util.Calendar; i ...
- 学会@ConfigurationProperties月薪过三千
学习 @ConfigurationProperties 之前我们需要一些前置知识点: @Value是个什么东西 首先明确:@ConfigurationProperties 是 SpringBoot 注 ...
- CentOS 7上使用Python 3和虚拟环境
在CentOS 7上使用Python 3和虚拟环境,请按照以下步骤操作: 首先,确保您的系统已安装Python 3.您可以使用以下命令检查Python 3是否已安装: python3 --versio ...
- OpenSSL命令总结
OpenSSL命令总结 疑今者察之古,不知来者视之往. 导航 介绍 对称加密 公钥加密 信息摘要 数字证书 杂项 介绍 密码学标准和互联网协议一样,是一种大家都遵守的约定和标准,比如PKCS#1中规定 ...
- 痞子衡嵌入式:在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤(MIPI DSI接口)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是在i.MXRT1170上快速点亮一款全新LCD屏的方法与步骤. 我们知道 LCD 屏的接口有很多:DPI-RGB.MIPI DSI.DB ...
- MIGO新增页签增强
1.文档说明 本方法是将新增字段,展示在MIGO的新增页签中,并保存到自建表. 新增页签的方法,和采购订单新增页签的方法原理基本一致,都是需要创建函数组,并实现相应方法和屏幕,并在增强中调用该函数组, ...
- 【技术控请进】华为云DevCloud深色模式开发解读
引言 近期,华为云DevCloud推出了开发者友好的深色模式,深受开发者们的喜爱和关注.大家都知道,深色模式(Dark Mode)在iOS13 引入该特性后各大应用和网站都开始支持了深色模式.在这之前 ...
- DWS临时内存不可用报错: memory temporarily unavailable
本文分享自华为云社区<DWS临时内存不可用报错: memory temporarily unavailable>,作者:漫天. 1.定位报错的DN/CN 当出现memory tempora ...
- 技术驱动,数据赋能,华为云GaussDB给世界一个更优选择
摘要:5月16日,"数智深耕 让美好发生 2023华为云城市峰会广州站"成功举行. 5月16日,"数智深耕 让美好发生 2023华为云城市峰会广州站"成功举行. ...
- Hadoop中mapreduce作业日志是如何生成的
摘要:本篇博客介绍了hadoop中mapreduce类型的作业日志是如何生成的.主要介绍日志生成的几个关键过程,不涉及过多细节性的内容. 本文分享自华为云社区<hadoop中mapreduce作 ...