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使用方法(含测试代码)相关推荐

  1. Tensorflow-gpu安装+Keras安装+Pytorch-gpu安装 经验分享/Win10 (conda安装Cuda和Cudnn) 含测试代码

    Tensorflow-gpu安装+Keras安装+Pytorch-gpu安装 经验分享/Win10 (conda安装Cuda和Cudnn) 含测试代码 注意: 本文中的Cuda和Cudnn安装均采用c ...

  2. MySQL万字总结(含测试代码)

    本文大部分笔记来源于:[狂神说Java]MySQL最新教程通俗易懂 1.MySQL 什么是数据库 数据库(DataBase,简称DB) 概念:长期存放在计算机内,有组织,可共享的大量数据的集合,是一个 ...

  3. Windows 和 android 平台Boost编译方法

    1.Windows 平台编译 环境 Windows 10 Visual Studio 2015  boost 1.64 步骤 直接执行 bootstrap.bat 之后直接运行 bjam.exe,或者 ...

  4. Android调用JNI本地方法跟踪目标代码

    正如Android调用JNI本地方法经过有点改变章所说跟踪代码是可行的,但是跟踪某些代码会出现anr,点击取消,还是不好运,有提高办法吗?回答是有(gdb还没试过,本文只讨论ida). 下面是我使用  ...

  5. Vivado 程序计数器(含测试代码)

    本篇文章使用Verilog语言编写实现带有优先级的83译码器,含有设计代码和测试代码. 一. 程序计数器,带有同步复位功能,有复位信号rst时,输出指令存储器使能信号为ce(0),表示指令存储器禁用, ...

  6. Vivado 多路选择器(含测试代码)

    本篇文章使用Verilog语言编写实现五选一多路选择器,含有设计代码和测试代码. 一.接口描述 五选一多路选择器接口描述表: 二.设计代码 `timescale 1ns / 1ps module se ...

  7. android+圆角屏幕方法,android屏幕圆角实现方法的示例代码

    现在很多全面屏手机的屏幕四角做成圆的,其圆润的感觉给人带来别样的视觉体验.先来一张我大锤子镇楼(不是广告呀,锤子没给钱),大家来直观感受一下圆角的魅力. 锤子.jpg 当然这种是硬件上实现的,我怀疑也 ...

  8. Android 播放视频的方法+播放测试地址 http

    1 在请求网络时 要记得设置权限 调用系统播放器 Uri uri = Uri.parse(Environment.getExternalStorageDirectory().getPath()+&qu ...

  9. 自定义Mono,实现Unity Android平台代码更新

    原理 在做这个之前,需要了解: 1.Unity是基于Mono的,我们写的代码都被编译成DLL,然后由Mono读取这个DLL并解析运行. 2.在Mono眼里,DLL和普通的资源文件没什么区别. 去年做过 ...

  10. python 快速排序_小白入门知识详解:Python实现快速排序的方法(含实例代码)...

    前言: 今天为大家带来的内容是:小白入门知识详解:Python实现快速排序的方法(含实例代码)希望通过本文的内容能够对各位有所帮助,喜欢的话记得点赞转发收藏不迷路哦!!! 提示: 这篇文章主要介绍了P ...

最新文章

  1. Spring_总结_02_依赖注入
  2. LeetCode题组:第121题-买卖股票的最佳时机
  3. 美国知名华人学者陈刚被捕,他出身贫寒,是一个不折不扣的工作狂
  4. PullToRefreshListView中嵌套ViewPager滑动冲突的解决
  5. 2021南京大学计算机复试线,南京大学2021年硕士研究生复试基本分数线
  6. $watch, $watchCollection, $watchGroup的使用
  7. c语言图片添加水印程序,[求助]C语言 bmp文件加上水印
  8. 实现四台服务器的负载均衡
  9. a0图框标题栏尺寸_a0图纸尺寸(a0图纸标题栏尺寸标准国标)
  10. aaas的主题--智能制造
  11. python爬虫猫眼电影TOP100(爬虫入门基础,同步入库)
  12. Android日期类组件学习
  13. jQuery实现打字机效果
  14. Java gateway process exited before sending its port number
  15. NYOJ 33 蛇形填数——————思维
  16. 【保姆级讲解】C语言---指针精华
  17. 关于计算机专业的调整与优化,Win10这样做优化让你的电脑更流畅
  18. 深度学习在静息态功能磁共振成像中的应用
  19. STK运载火箭发射仿真
  20. 中国石油大学《化工原理一》第一阶段在线作业

热门文章

  1. Ubuntu查看网速工具
  2. PowerBuilder制作纸牌游戏
  3. Android各控件Demo下载地址
  4. 关于OpenCV中图像的widthStep
  5. Hello CSND
  6. 杨力祥老师《高级Windows程序设计》课程短评
  7. 中科院-杨力祥视频教程 04课程
  8. fcntl函数的作用及应用场景
  9. 河南大学计算机网络考试试卷,计算机网络试卷.doc
  10. 啦啦外卖40.7 APP小程序三端 独立开源版本