从内存导出文件HProf查看内存变量内容

HProf文件是Java/Android的内存dump文件。提到HProf文件,大家首先能想到的肯定是用于分析内存泄漏。而且目前看到的工具,基本上也都只支持用HProf来进行内存泄漏的分析。不过HProf文件除了分析内存泄漏,还可以查看内存的内容,也就是可以查看类中各个变量的值。

​ 查看内存内容有什么作用呢, 主要有如下几个用途:

​ 1.协助进行内存泄漏的分析,通过分析某个实例的内容,从而进一步定义实例是什么地方分配的。比如一个有一些Bitmap怀疑泄漏的,但是从引用关系来却看不出它的来源,如果分析Bitmap的内容,看下它的width, height等信息,就可能可以定位到这个Bitmap是在什么设置的。

2.发生bug了,怕等下现场环境被破坏了, 可以先抓取Hprof文件,后面可以根据这个Hprof文件分析, 比如查看某个类中某个值是多少等。对于Android SystemUI等程序,发生bug后,如果通过IDE连上进行调试,不仅速度慢,而且搞不好调试调试着,现场就被破坏了。

3.很多时候,不能调试,但是有Hprof. 比如一个问题只能在客户哪里能复现,肯定无法调试啦,但是客户可以帮忙抓Hprof文件。

一句话,分析问题时,分析手段从来不会嫌多的,多一个手段,有可能就能把问题解决了。

VisualLog查看HProf内容

​ VisualLog的"内存分析(HeapAnalyzer)"工具可以较方便的查看内存内容,查看类中变量的值。

1.查看实例

这里以查看Bitmap类的内容为例说明查看实例的功能。

1.VisualLog中点击菜单"视图->插件->内存分析", 内存分析窗口中执行菜单"文件->抓取Android内存"导出对应Android进程的内存,或者直接执行菜单“文件->打开”打开已经保存的Hprof文件

2.在左侧类树面板,搜索Bitmap

3.选择Bitmap节点,执行右键菜单"查看实例列表"

4.在实例列表中,选择一个Bitmap实例,执行右键菜单"查看实例"

view_instance.png

这跟在AndroidStudio中,查看变量是一样的。

2.同时查看多个实例的变量值

​ 在上面例子中,实例列表中有72个Bitmap实例。如果要找出mWidth为72的实例,需要一个个点开查看,这样速度很慢的。可以在实例列表中列出mWidth, 这样可以很方便的找到mWidth为72的节点。

1.在实例列表页面,执行右键菜单"选择添加字段列"

select_column.png

2.这样在表格中会列出所有实例的的mWidth,同时可以点击mWidth字段进行排序

colunm_result.png

3.搜索字段

在命令行区,输入如下命令,搜索mWidth为72的Bitmap

!search_field

class:android.graphics.Bitmap

field:mWidth condition:72

search_field.png

4.搜索字符串

执行菜单"脚本->搜索字符串", 搜索字符串, 如下结果为搜索bitmap的结果

searchstring.png

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值