Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug

文章目录

  • 引言
  • 一、Android Studio 的调试模式
  • 二、Android Studio 的Debug 窗体
  • 三、查看方法栈帧和线程堆栈快照
  • 四、条件断点调试

引言

作为一个程序员,Debug绝对是最重要的技能和手段之一,毫不客气地说有相当数量的程序员或许没有真正掌握调试技能,尽管Android Studio 已经提供了相当便捷的调试功能,但是他们可能只知道“Debug app”这一种方式进入调试模式,这篇文章很简单但是很实用。

一、Android Studio 的调试模式

在Android Studio中可以通过两种方式进入调试模式:

  • 直接点击Debug按钮,以Debug模式启动App
  • 启动了App进程之后,点击“Attach to Debugger to Android Process”,然后选择要调试的进程,点击“OK”之后就进入了调试模式,如果有断点就会进入断点。
    Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug_第1张图片

二、Android Studio 的Debug 窗体

Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug_第2张图片

  1. 以调试模式重启App
  2. 快速执行到下一个断点
  3. 停止调试
  4. 所有的断点视图,可以快速查看所有的断点,进行一系列的动态条件配置
  5. 快速设置断点无效
  6. Get Thread Dump 获取线程堆栈快照,点击一次获取一次
  7. 以Debug模式启动App
  8. Attack Debugger to Android Process (选择调试线程,App启动后可以快速进入调试模式)
  9. Step Over(F8 逐句调试,遇到内部函数直接跳过内部执行细节)
  10. Step Into(F7 逐句调试,遇到内部函数不会跳过内部执行细节)
  11. Force Step Into
  12. Step out(当执行到内部函数内时,可以直接略过执行细节直接返回)
  13. Run to Cursor

三、查看方法栈帧和线程堆栈快照

通过方法栈帧可以看得出方法的调用路径(自下而上,下部是起点),点击“Get Thread Dump” 可以得到关于线程的更详细的堆栈快照:
Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug_第3张图片

  • runnable——表示正常运行状态
  • waiting——表示阻塞态

Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一点状态的thread-dump的能力,虽然各个 Java虚拟机打印的thread dump略有不同,但是大多都提供了当前活动线程的快照,及JVM中所有Java线程的堆栈跟踪信息,堆栈信息一般包含完整的类名及所执行的方法,如果可能的话还有源代码的行数。

点击对应的线程时就会显示对应的信息,而通过两个变量监控窗体,我们可以通过 “Add to Watchs”实时监控任意变量的值,然后在变量上右键会弹出一些操作:

  • 拷贝值、设置值
  • Evaluate Expressions 计算表达式,可以模拟计算表达式
    Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug_第4张图片
  • Show Referring Objects 显示某个变量的引用路径
    Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug_第5张图片

四、条件断点调试

在断点上点击右键,就进入断点的配置窗体:
Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug_第6张图片
经过以上配置之后,当view.getId()的值等于R.id.mainMenu1IV时这个断点才有效,即所谓的条件断点。
Android 进阶——借助Android Studio自带的中高级调试功能快速定位和查找Bug_第7张图片
当然还有更多条件可以去配置,需要你们自己在项目中应用。未完待续…

你可能感兴趣的:(Android,进阶)