AS IDEA 调试技巧
目录
AS IDEA 调试技巧
源码阅读
- AndroidStudio 阅读 SDK 源码及
AOSP
源码- AOSP 源码能编译出 SDK ,简单说 AOSP > SDK
- SDK 是 android 开发工具包,也就是项目中依赖的
android.jar
- 缺点:导入源码太麻烦
SourceInsight
阅读AOSP
源码- 将分散的代码,汇合成一个虚拟的整体
- Web 版源码阅读
- AndroidXRef
- 在
File Path
中搜索activity.java
- 在
In Project(s)
中选择frameworks
- 搜索结果
- 在
- Android Code Search
- Android 社区:近期不维护了
- AndroidXRef
DexClassLoader:
调试面板
- 调试工具
- 定位调试位置
- 单步跳过
- 单步跳入
- 强制单步跳入
- 单步跳出
- Drop Frame:回退到了上一个调用的方法。Frame 其实对应的就是一次方法调用压栈的信息
- Run to Cursor:跳到光标处
- 计算表达式
- 断点工具
- 继续运行
- 暂停运行
- 停止调试
- 查看断点
- 禁用断点
- 调用栈&线程区域
- Frames区域:显示当前断点调用栈
- Threads区域,显示所有线程状态
- 变量区域
- Watches区域:手动添加变量显示区域
六大断点调试技巧
普通断点
:即普通的行断点,在代码对应行进行断点日志断点
:打印日志的,程序运行不打断属性断点
:对属性的修改和访问进行断点方法断点
:对方法的参数以及返回值进行断点调试条件断点
:满足某种条件下才进行断点异常断点
:程序异常时进行断点,能够保存现场
系统源码调试
1、Android SDK 源码调试:通过 Android SDK 下载的系统源码进行调试
优点
- 能够
快速
了解系统源码的调用栈,学习源码的调用流程 - 方便快捷,入手简单,操作简单
- 能够基本满足日常开发,对于调试技巧有较高的要求
缺点
- 系统源码查看过程,某些 hide 标签类无法跳转
- 调试过程中,调试断点和系统源码存在行号不对应的情况
- 出现行号不对应时调试操作较为复杂
2、AOSP 源码调试:通过下载 AOSP 源码进行编译,并将镜像导入到 ADV 中,进行调试
优点
- 能够调试系统进程的源码,包括 system_server 进程
- 系统源码可以直接断点,并且源码行号可以一一对应
缺点
- 编译虚拟机运行卡断,调试运行不够流畅
- 调试环境搭建复杂,需要很长的时间
AOSP 代码组成
- art:Android ART 虚拟机实现代码
- bionic:针对 Android 优化过的 libc 的运行时库
frameworks
:框架实现代码 Service、Package manager 等- kernel:Linux Kernel,默认代码不下载
- libcore:Java 核心库,如 Json、虚拟机导出库、jdk 等
3、ROM 定制源码调试:通过下载手机厂商提供的系统源码,烧写对应系统版本手机系统,使用真机调试
优点
- 能够调试系统进程的源码,包括 system_server 进程
- 系统源码可以直接断点,并且源码行号可以一 一对应
- 运行速度快,系统不卡顿
缺点
- 调试的是手机厂商定制的源码,和 AOSP 源码存在一定的差异
- 调试环境搭建复杂,需要很长的时间
源码阅读方法
- 阅读代码之前,先了解某项技术的背景知识,实现原理等
- 带着问题/ 疑问,再切入代码
关注核心逻辑
(不要被某些参数检测,个别语言性征用法带偏)- 优先看方法上的
注释说明
- 熟悉源码中常用的设计模式
- 学习笔记(画出调用流程,关键实现函数精读 + 笔记)
2018-10-14
本文来自博客园,作者:白乾涛,转载请注明原文链接:https://www.cnblogs.com/baiqiantao/p/9788432.html