【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】内存泄漏检查的更多相关文章
- Windows平台上C++开发内存泄漏检查方法
充分的利用调试工具可以非常方便地避免内存泄漏问题. 这里介绍两种方法,互为补充,第一种是VC编译器提供的方法,第二种是专用的内存泄漏检查工具Memmory Validator.这两种方法的基本原理是一 ...
- c# 内存泄漏检查心得
系统环境 windows 7 x64 检查工具:ANTS Memory Profiler 7 或者 .NET Memory Profiler 4.0 开发的软件为winform / windows s ...
- BCB:内存泄漏检查工具CodeGuard
一.为什么写这篇东西 自己在使用BCB5写一些程序时需要检查很多东西,例如内存泄漏.资源是否有释放等等,在使用了很多工具后,发觉BCB5本身自带的工具―CodeGuard,非常不错,使用也挺方便的,但 ...
- iOS学习——内存泄漏检查及原因分析
项目的代码很多,前两天老大突然跟我说项目中某一个ViewController的dealloc()方法没有被调用,存在内存泄漏问题,需要排查原因,解决内存泄漏问题.由于刚加入项目组不久,对出问题的模块的 ...
- C/C++应用程序内存泄漏检查统计方案
一.前绪 C/C++程序给某些程序员的几大印象之一就是内存自己管理容易泄漏容易崩,笔者曾经在一个产品中使用C语言开发维护部分模块,只要产品有内存泄漏和崩溃的问题,就被甩锅“我的程序是C#开发的内存都是 ...
- Linux 内存泄漏检查工具 valgrind
抄自<从零开始的JSON库教程>,先mark一下,以后再慢慢研究. ======== 引用分割线 ======== 在 Linux.OS X 下,我们可以使用 valgrind 工具(用 ...
- 检查c# 内存泄漏
c# 内存泄漏检查心得 系统环境 windows 7 x64 检查工具:ANTS Memory Profiler 7 或者 .NET Memory Profiler 4.0 开发的软件为winform ...
- 用mtrace检查内存泄漏
http://blog.csdn.net/ixidof/article/details/6638066内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的&qu ...
- mtrace检查内存泄漏
内存泄漏检查方法(for Linux) 如果你更想读原始文档, 请参考glibc info的"Allocation Debugging" 一章 (执行info libc);glib ...
- 使用 Android Studio 检测内存泄漏与解决内存泄漏问题
本文在腾讯技术推文上 修改 发布. http://wetest.qq.com/lab/view/63.html?from=ads_test2_qqtips&sessionUserType=BF ...
随机推荐
- Cesium被接入数字孪生系统后会发生怎样的改变?
众所周知,Cesium凭借其开源免费的特点一直垄断着整个三维GIS的生态系统,但是随着数字孪生技术的发展以及各项新需求的不断涌现,Cesium与数字孪生系统相结合的潜力也逐渐凸显. 一般而言,Cesi ...
- 在C#中,如何以编程的方式设置 Excel 单元格样式
前言 在C#开发中,处理Excel文件是一项常见的任务.在处理Excel文件时,经常需要对单元格进行样式设置,以满足特定的需求和美化要求,通过使用Java中的相关库和API,我们可以轻松地操作Exce ...
- Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134)
Confluence OGNL表达式注入命令执行漏洞(CVE-2022-26134) 简介 Atlassian Confluence是企业广泛使用的wiki系统.2022年6月2日Atlassian官 ...
- 技本功|统计信息对SQL执行效率的影响
在一个风和日丽的下午,奋哥哥突然接到业务方线上业务数据库CPU资源告警信息,立马放下手里的枸杞登录业务方阿里云控制台查看具体问题. 对于数据库当前正在发生中的问题,我们首先从数据库实时会话信息中尝试抓 ...
- 人大金仓驱动包kingbasejdbc8.6.0.jar V8驱动jar包
人大金仓驱动包kingbasejdbc8.6.0.jar V8驱动jar包 工作上要将kingbaseV8数据库整合到项目,我在官网找了半天,连个jdbc驱动包下载入口都找不到,简直就是官方文档毫无诚 ...
- 大道如青天,协程来通信,Go lang1.18入门精炼教程,由白丁入鸿儒,Go lang通道channel的使用EP14
众所周知,Go lang的作用域相对严格,数据之间的通信往往要依靠参数的传递,但如果想在多个协程任务中间做数据通信,就需要通道(channel)的参与,我们可以把数据封装成一个对象,然后把这个对象的指 ...
- 【华为云技术分享】LiteOS无法直接烧录或者烧录失败解决方法--ST-Link
前提条件: 程序编译成功,并且电脑上已经安装ST-Link驱动,你使用的仿真器也是ST-Link. 上图黑色的是J-Link,下图紫色的是ST-Link,本教程适用于ST-Link,如果是J-Link ...
- 使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能
本文分享自华为云社区<使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能>,作者:云容器大未来. AI 技术现状及发展趋势 过去十余年,依托全球数据.算法 ...
- 华为云MetaStudio全新升级,盘古数字人大模型助力数字人自由
摘要:基于盘古大模型能力,华为云MetaStudio数字内容生产线全新升级,推出数字人模型生成服务和模型驱动服务. 近日,华为开发者大会2023 ( Cloud ) 在东莞拉开帷幕.基于盘古大模型能力 ...
- 4种方法帮你解决IntelliJ IDEA控制台中文乱码问题
摘要:在本文中总结了4 种方法完美解决 IntelliJ IDEA 控制台中文乱码问题. 前言 IntelliJ IDEA 如果不进行配置的话,运行程序时控制台中文乱码问题会非常严重,严重影响我们对信 ...