End

AS IDEA 调试技巧

本文地址


目录

AS IDEA 调试技巧

源码阅读

  • AndroidStudio 阅读 SDK 源码及 AOSP 源码
    • AOSP 源码能编译出 SDK ,简单说 AOSP > SDK
    • SDK 是 android 开发工具包,也就是项目中依赖的 android.jar
    • 缺点:导入源码太麻烦
  • SourceInsight 阅读 AOSP 源码
    • 将分散的代码,汇合成一个虚拟的整体
  • Web 版源码阅读

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

posted @ 2018-10-14 22:25  白乾涛  阅读(1119)  评论(0编辑  收藏  举报