android平台malloc_debug使用方法(含测试代码)
malloc_debug测试程序
malloc debug是android平台自带的调试工具,与其他内存检查工具原理类似,使用调试函数替换标准c库中的malloc/free等内存操作相关函数,每次申请释放内存都对内存做标记,当内存泄漏或越界时,会记录相关信息。
malloc debug是android bionic的debug库,动态库或可执行文件链接libc_malloc_debug.so就可以测试内存泄露或内存越界,其源码在android sdk以下路径: android/bionic/libc/malloc_debug
使用步骤
1.查内存泄漏,在程序退出时,使用debug_dump_heap 保存堆栈信息,用于最后生成内存报告
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>extern "C" bool debug_dump_heap(const char* file_name);
int main()
{int c;char* p = (char*)malloc(1);debug_dump_heap("/sdcard/debug_mem/test.txt");return 0;
}
2.编译并把库和可执行文件推到android机器 ,使用ndk编译需要 -g 参数,否则在生成report时无法定位函数位置
并把库和可执行文件推到手机,执行以下命令
adb shell stop
adb shell setprop libc.debug.malloc.options backtrace
adb shell setprop libc.debug.malloc.program test
adb shell export LIBC_DEBUG_MALLOC_OPTIONS=backtrace
adb shell export LIBC_DEBUG_MALLOC_ENABLE=1
adb shell start
3.运行完毕后,会生成相应的文件,adb pull 到本地pc 如:adb pull /sdcard/debug_mem/ ./
并把库和可执行文件放到pc相应路径下,比如,so在手机的/data/目录下,需要把so拷出来放到pc的/data/目录下, 因为生成的文件记录的动态库路径在/data下。(这里的库必须是带-g编译选项的,android sdk的out/xxx/symbol下的库)
4.执行native_heapdump_viewer.py 工具(工具在github工程内),即可将相应的文件生成report 如:
python native_heapdump_viewer.py --verbose --reverse debug_mem/mem.txt > ${OUTPUT_DIR}/mem_report.txt
或者(生成html的报告)
python native_heapdump_viewer.py --verbose --reverse --html debug_mem/mem.txt > ${OUTPUT_DIR}/mem.html
如果要查内存越界
输入以下命令,并执行程序,从log中会打印 export LIBC_DEBUG_MALLOC_OPTIONS=backtrace
android平台malloc_debug使用方法(含测试代码)相关推荐
- Tensorflow-gpu安装+Keras安装+Pytorch-gpu安装 经验分享/Win10 (conda安装Cuda和Cudnn) 含测试代码
Tensorflow-gpu安装+Keras安装+Pytorch-gpu安装 经验分享/Win10 (conda安装Cuda和Cudnn) 含测试代码 注意: 本文中的Cuda和Cudnn安装均采用c ...
- MySQL万字总结(含测试代码)
本文大部分笔记来源于:[狂神说Java]MySQL最新教程通俗易懂 1.MySQL 什么是数据库 数据库(DataBase,简称DB) 概念:长期存放在计算机内,有组织,可共享的大量数据的集合,是一个 ...
- Windows 和 android 平台Boost编译方法
1.Windows 平台编译 环境 Windows 10 Visual Studio 2015 boost 1.64 步骤 直接执行 bootstrap.bat 之后直接运行 bjam.exe,或者 ...
- Android调用JNI本地方法跟踪目标代码
正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用 ...
- Vivado 程序计数器(含测试代码)
本篇文章使用Verilog语言编写实现带有优先级的83译码器,含有设计代码和测试代码. 一. 程序计数器,带有同步复位功能,有复位信号rst时,输出指令存储器使能信号为ce(0),表示指令存储器禁用, ...
- Vivado 多路选择器(含测试代码)
本篇文章使用Verilog语言编写实现五选一多路选择器,含有设计代码和测试代码. 一.接口描述 五选一多路选择器接口描述表: 二.设计代码 `timescale 1ns / 1ps module se ...
- android+圆角屏幕方法,android屏幕圆角实现方法的示例代码
现在很多全面屏手机的屏幕四角做成圆的,其圆润的感觉给人带来别样的视觉体验.先来一张我大锤子镇楼(不是广告呀,锤子没给钱),大家来直观感受一下圆角的魅力. 锤子.jpg 当然这种是硬件上实现的,我怀疑也 ...
- Android 播放视频的方法+播放测试地址 http
1 在请求网络时 要记得设置权限 调用系统播放器 Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+&qu ...
- 自定义Mono,实现Unity Android平台代码更新
原理 在做这个之前,需要了解: 1.Unity是基于Mono的,我们写的代码都被编译成DLL,然后由Mono读取这个DLL并解析运行. 2.在Mono眼里,DLL和普通的资源文件没什么区别. 去年做过 ...
- python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...
前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...
最新文章
- Spring_总结_02_依赖注入
- LeetCode题组:第121题-买卖股票的最佳时机
- 美国知名华人学者陈刚被捕,他出身贫寒,是一个不折不扣的工作狂
- PullToRefreshListView中嵌套ViewPager滑动冲突的解决
- 2021南京大学计算机复试线,南京大学2021年硕士研究生复试基本分数线
- $watch, $watchCollection, $watchGroup的使用
- c语言图片添加水印程序,[求助]C语言 bmp文件加上水印
- 实现四台服务器的负载均衡
- a0图框标题栏尺寸_a0图纸尺寸(a0图纸标题栏尺寸标准国标)
- aaas的主题--智能制造
- python爬虫猫眼电影TOP100(爬虫入门基础,同步入库)
- Android日期类组件学习
- jQuery实现打字机效果
- Java gateway process exited before sending its port number
- NYOJ 33 蛇形填数——————思维
- 【保姆级讲解】C语言---指针精华
- 关于计算机专业的调整与优化,Win10这样做优化让你的电脑更流畅
- 深度学习在静息态功能磁共振成像中的应用
- STK运载火箭发射仿真
- 中国石油大学《化工原理一》第一阶段在线作业