Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

完成作业 #9

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

kptnewler
Copy link

极客时间账号:13055537258
这份作业断断续续一直做,但是没有整理,今天花点时间整理了一下。
原理:使用HaHa库进行hprof解析,Leak-Canary中的ShortestPathFinder获取堆栈信息,过程:
1.通过findClass获取到ClassObj。

2.如果按照正常遍历ClassObj的heap会发现一共有4块heap分别是default、app、image、zygote,而我们项目中的主要来源自appHeap中,所以我只提取了这个Heap中的Instance列表。
3.然后遍历Instance列表,通过HaHaHelper的fieldValue提取出buffer数组。

4.拿到buffer数组我先对数组进行大小分类,如果大小不同可以大概率判定为是不同图片,过滤掉一部分。

5.剩下一部分的通过进行遍历比较value值,判断是否是相同图片。后续看能不能使用分治算法进行比较。

6.通过结果通过对象转成json字符串打印。

心得和体会:

1.其中遇到的问题和其他同学一样就是无法打印出堆栈信息,后来通过查看研究Leak-Canary源码发现了ShortestPathFinder这个类,并对此进行了部分删减。

2.之前用过一段时间的MAT,感觉有点难用,这份作业我给了新的自动化分析的思路,很感谢。

3.最后是执行力上的思考,作业虽然大概完成了,但是一直没花时间整理,给自己敲了一个警钟,以后一定要把一件事情有始有终的做完。

这份作业主体前几天就完成了,年底事情很多,一直没有整理,今天花点时间整理了一下。
原理:使用HaHa库进行hprof解析,Leak-Canary中的ShortestPathFinder获取堆栈信息,过程:
1.通过findClass获取到ClassObj。

2.如果按照正常遍历ClassObj的heap会发现一共有4块heap分别是default、app、image、zygote,而我们项目中的主要来源自appHeap中,所以我只提取了这个Heap中的Instance列表。
3.然后遍历Instance列表,通过HaHaHelper的fieldValue提取出buffer数组。

4.拿到buffer数组我先对数组进行大小分类,如果大小不同可以大概率判定为是不同图片,过滤掉一部分。

5.剩下一部分的通过进行遍历比较value值,判断是否是相同图片。后续看能不能使用分治算法进行比较。

6.通过结果通过对象转成json字符串打印。

心得和体会:

1.其中遇到的问题和其他同学一样就是无法打印出堆栈信息,后来通过查看研究Leak-Canary源码发现了ShortestPathFinder这个类,并对此进行了部分删减。

2.之前用过一段时间的MAT,感觉有点难用,这份作业我给了新的自动化分析的思路,很感谢。

3.最后是执行力上的思考,作业虽然大概完成了,但是一直没花时间整理,给自己敲了一个警钟,以后一定要把一件事情有始有终的做完。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant