调试android源码之打堆栈加重写控件
来源:互联网 发布:mysql 5.7 for linux 编辑:程序博客网 时间:2024/05/26 15:57
转载:http://blog.csdn.net/aaa111/article/details/45627119
在跟一大神同时一起解bug的时候学到的。现在这个同事已经离职,祝他有更好的发展,也感谢他在带我解bug的时候教会我这么多知识。
通常我们在看android系统源码的时候需要查看一些方法的调用方,这时候在Android Studio中按快捷键Ctrl+Alt+H就好了(如何将Android系统源码导入到AS中请看我的前置文章)。但是很多时候一个方法会被很多地方调用,而我们又无法确定我们需要追的流程走的是哪一条路线的时候就,打印堆栈就是一个很好的方法。
一个简单的使用方法如下:
打堆栈
比我们知道这个方法会被执行,但是我们不知道这个方法是被谁调用执行的,那我们可以在这个方法里添加下面几行代码:
- 1
- 2
- 3
- 4
- 5
一般这个时候从log中就可以看到调用的流程。我这里没有现成的log就不举例了。
重写控件
还有一种情况,我们甚至不知道这个方法会不会执行的时候,并且我们关注的重点其实是一个控件会不会被显示出来,那么我们可以以直接去重写这个控件,然后在重写这个控件的时候添加上打印堆栈的代码:
- 重写这个控件
比如我们现在需要查看一个ImageButton是什么时候显示出来的,被谁调用显示出来的,那么可以先写一个MyImageButton.java类,在其中重写相应的方法,并天机打堆栈的代码。
java代码中:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 使用这个控件的.xml文件中 使用我们重写的这个控件
将原先使用到ImageButton的地方
- 1
- 2
- 3
- 4
改写成
- 1
- 2
- 3
- 4
搞定。
这样在需要显示这个ImageButton的时候,就会使用我们的重写的MyImageButton,并且在显示的时候执行了重写的setVisibility方法,自然机会打印堆栈,从堆栈中得到了我们想要的信息,即在哪里调用方法显示出了这个ImageButton。
阅读全文
0 0
- 调试android源码之打堆栈加重写控件
- 调试方法之打堆栈加重写控件
- Android 调试之打印堆栈
- Android 调试技巧之打印堆栈
- 调试Android代码之打log
- 调试之调用堆栈
- android 调试堆栈整理
- android 的堆栈调试
- android 源码打patch
- Android之源码之模块编译调试
- 调试技巧之调用堆栈
- 调试技巧之调用堆栈
- 调试技巧 之调用堆栈
- 调试技巧之调用堆栈
- 调试技巧之调用堆栈
- 调试技巧之调用堆栈
- 软件崩溃之堆栈调试
- 调试技巧之调用堆栈
- MFC-ListBox简单使用
- Java二分查找、折半查找
- Eclipse快捷键设置
- Nodemcu上使用Mongoose OS的坑(1)
- MODBUS协议
- 调试android源码之打堆栈加重写控件
- okhttp同步/异步
- 【Spring Security实战系列】Spring Security实战(五)
- arxiv | 技术概述深度学习:详解前馈、卷积和循环神经网络
- unity3d 任务头上的血条
- bzoj1726 [Usaco2006 Nov]Roadblocks第二短路(spfa)
- 模型评估-留出法
- 91免费▪分享:什么是共享经济?共享经济共享的都是什么?
- Android 通知(使用NotificationCompat.Builder )