Android Studio调试工具总结

前言:写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;当我们的程序出现bug时,调试可以快速的找到bug。进入调试状态,我们可以清楚的了解程序的整个执行过程,可以对内存的数据进行监视。下面就简单总结一下调试的基本使用和一些调试的技巧。本文是通过查找网上的多方资源整理而来,如果有谬误的地方请大家指出,希望本文能对你有所帮助。

一、插入断点

选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可

二、进入调试状态

设置好断点后,点击工具栏中的小臭虫(Debug)进入调试状态。

当一个应用进入调试状态后,Android Studio会弹出这样的Debug窗口,即调试者状态。我们在这里可以对我们的程序进行监视和调试。

IDE下方出现Debug视图,在①区域中显示了程序执行到断点处所调用过的所用方法,越下面的方法被调用的越早;在②区域可以给指定的变量赋值(鼠标左键选择变量,右键弹出菜单选择setValue...)。这个功能可以更加快速的检测你的条件语句和循环语句。在③区域中可以对某一个特定的变量进行监视,在高级调试部分会再次讲到。

三、常用的调试方式和快捷键

1.常用调试功能及快捷键:

  • step into (F7):进入子函数
  • step over (F8):越过子函数,但子函数会执行
  • step out (Shift + F8):跳出子函数
  • Run to Cursor (Alt + F9) 运行到光标所在的位置。
  • show Execution Point (Alt + F10) 快速定位当前调试的位置,并将该行高亮的显示出来。

2.调试功能解释

  • step into:就是单步执行,遇到子函数就进入并且继续单步执行;例如当你执行到System.out.println("XXXX")时,使用这个功能时就会进入到System.out.println方法所在类的println方法下(当然这样做事没有必要的,如果进入了想跳出执行step out就可以了。)
  • step over:是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止,也就是把子函数整个作为一步。例如上面的例子中,System.out.println("XXXX")执行完后是跳到下一个语句中而不会跳进去,这个功能也是比较常用的,一直按F8就可以了。
  • step out:就是但单步执行到子函数内时,用step out就可以执行完子函数余下部分,并返回到上一层函数。
  • Run to Cursor:运行到光标所在的位置,执行该功能后,不论你执行到哪里,程序都可以执行到你光标的所在行下。
  • show Execution Point:当你不知道程序当前已经执行到哪里的时候,就可以使用这个功能,Android Studio 会跳到执行行所在的界面,并将该行高亮的显示出来。

四、高级调试功能

以上的调试方法只是简单调试,下面介绍一些比较高大上的调试功能。

1、Evaluate Expression

这个功能非常实用,可以在断点处直接进入一个求值环境,在这里你可以执行任何你感兴趣的表达式;如下图:

比如在断点处有一个对象 object ,如果你要查看它的某个属性很简单,在Debug窗口就能看到,但是如果你想要执行它的某个方法看看结果是什么呢?借助这个可以实现。当然它的功能远不止这么多,相当于直接进入了一个 REPL 环境,非常实用。忘了说了,快捷键 Alt + F8 :P

2、条件断点

假设你的断点在一个列表的循环里面,可是你只对这个列表的某一个元素感兴趣,只想在遇到这个元素的时候才断下来;你是一直人肉 F9 直到满足条件吗?条件断点就是满足这种需求的,顾名思义,在特定条件下的断点。使用起来也非常简单,在你的断点上鼠标有件会出现一个小窗口,写上条件即可。

3、日志断点

很多时候我们调试的时候更多的是打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以经常做的事情就是在代码里面添加日志信息,输出函数参数,返回信息,输出我们感兴趣的变量信息等。

但是这么做一个问题就是,我们添加了日志代码需要重新编译;在没有 Instant Run 之前的黑暗时代这么做是非常痛苦的,每次编译少则几十秒,多则几分钟;这样无意义的等待简直就是折磨;其实,除了热部署工具,我们还可以使用日志断点解决这个问题。

首先我们在想要输出信息的地方下一个断点;然后右键这个断点,在出现的设置框里面把这个断点的 suspend 属性设置为 False ,这样虽然叫做“断点”,但是并不会真正断下来;然后,我们在 log message 里面填上我们想要输出的日志信息。如下图(注意标红位置):

这样,每次代码执行到这个断点的位置,这个可爱的断点并不会使我们的程序停下来,而是输出我们告诉它的日志信息,然后继续执行;非常方便。

4、方法断点

传统的调试方式是以行为单位的,所谓单步调试;但是很多时候我们关心的是某个函数的参数,返回值;(回想一下我们使用日志的时候打印的最多的信息难道不是函数的参数和返回值吗?)使用方法断点,我们可以在函数级别进行调试;如果经常跳进跳出函数或者只对某个函数的参数感兴趣,这种类型的断点非常实用。具体使用方法有两种方式;最简单的是在你感兴趣的方法头那一行打上断点,这时候你会发现断点图标有点不一样,这就是方法断点了,如下图:

另外一种方式是通过 断点设置窗口 , 后面介绍。

5、异常断点

在有些情况下,我们只对某些特定的异常感兴趣,或者我们只对异常感兴趣;我们希望只要程序发生异常程序就能断下来;这好像保存现场一样,只要发生命案了(异常),第一时间保存现场,这样什么指纹之类的线索就会清晰很多,坏蛋就算想逃也是插翅难飞啊。

Android Studio给了我们这个能力!那就是 异常断点 !可以在特定异常发生的时候,直接让整个程序断下来;如果你对所有异常感兴趣,直接 Throwable 即可。

具体做法是,进入 Run -> View BreakPoints 或者使用快捷键打开断点设置窗口;如下图:

点击左上角的
:heavy_plus_sign: ,会出现一个选择框;选择 Exception Breakpoint ;然后会出现一个对话框,选择你感兴趣的异常:

6、Field WatchPoint

在上面我们添加异常断点的时候,点击加号的时候,有四个选项;第一个就是我们前面所说的第二种方法断点的添加方式,第三个是异常断点,那么第二个 Field WatchPoint 是干什么的呢?

有没有这样一种场景:你发现某个值莫名其妙滴不知道什么时候被谁给修改了,罪魁祸首是谁?Java虽然是值传递,但是引用也可以是值;对象全部存放在堆上面,而堆是被所有线程共享的,因此在非常复杂的场景下,你根本不知道这些共享变量被谁修改了,这样非常危险;在多线程环境下,不变性是一个很重要的特性,我们看到高并发的语言诸如 Erlang , Scala 对于这种不变性都有着某种程度的支持。

好吧,扯远了;那么我们怎么揪出这个修改我们值的捣蛋鬼呢?那就是这个 Field WatchPoint 的功能了;使用它我们可以在某个 Field 被访问或者修改的时候让程序断下来;完美解决这个问题。

下断点的方式和方法断点类似,也有两种;第一种是直接在某个字段的声明处下断点,这时候断点图标会改变,如下图:

右键这个断点我们可以进行一些设置,比如默认是被修改的时候断下来,你也可以改为每次访问这个字段就断下来。

另外一种方式是 Run -> View BreakPoint 打开设置,与异常断点类似。

后续:由于本人能力有限,只能总结到这里,其实关于调试的功能还有很多需要总结,会在以后的时间里对文章进行修改和增加。希望本文能让大家有所收获。^-^

以下是关于Android Studio调试方面的博文,供大家查看

相关链接:

Android Studio你不知道的调试技巧

[Android Studio 权威教程]断点调试和高级调试

Android Studio调试功能使用总结【转】

时间: 2024-10-06 19:52:33

Android Studio调试工具总结的相关文章

Android Studio官方文档之构建和运行你的APP

Android Studio官方文档之构建和运行你的APP 本文由MTJH翻译,jkYishon审校. 前言 默认情况下,Android Studio设置新的项目并且部署到模拟器或者真机设备上,只需要点击几下.使用即时运行,你并不需要构建一个新的APK即可将改变后的方法和现有的应用资源应用到一个正在运行的应用程序中,所以代码的改变是即时可见的. 点击Run来构建并运行你的APP.Android Studio通过Gradle构建你的App,选择一个部署的设备(模拟器或连接的设备),然后把你的APP

macOS(Sierra 10.12)上Android源码(AOSP)的下载、编译与导入到Android Studio

http://blog.bihe0832.com/macOS-AOSP.html [本文结构] 背景 背景简介 最近因为项目需要,要研究Android系统中应用安装的详细过程.在这种场景下,最好的办法就是Read the Fucking Source Code.之前都是在线看,这次因为看的内容比较多,而且看的比较细,因此打算在本地checkout一份.这篇文章就主要记录本人使用macOS(Sierra 10.12.1)在本地checkout出AOSP(7.1.1)并编译导入Android Stu

Android Studio 2.3 正式版新功能,你不来看看?!

2017.3.3 Google老大发布了Android Studio 2.3正式版. 在许多2.3beta版本的基础上修复了bug然后推出了正式版.提供了一些新特性,和对部分已有功能的修改完善. Build Instant Run Improvements and UI Changes 之前的版本,会默认勾选上Instant Run 选项,然后在控制面板上只有一个Run 和Debug按钮.编译器自动判断是否需要Instant Run.2.3.0正式版在控制面板上多出了一个Instant Run按

如何才能熟练使用 Android Studio?

推荐购买<精通AndroidStudio> 编辑推荐 资深Android开发工程师根据新版Android Studio 2.2 精心打造的<精通AndroidStudio>.详细介绍了 Android Studio 实用的功能与技巧,非常全面.系统.专业.实例丰富. 内容简介 本书以通俗易懂的语言全面系统地介绍了Android Studio实用工具和操作技巧,场景明确,步骤清晰,图文结合.全书共16章.第1章对Android Studio做概要的介绍,从特性.界面.工具.功能到环境

使用Android Studio开发android应用(持续更新)

使用Android Studio开发android应用 --------------------转载请注明出处:coder-pig 前言: 在2013年5月16日开发者大会上,google公司发布了一个新的集成开发环境:Android Studio 该IDE是专门用来开发安卓应用程序的,如果你需要使用Java的话就需要下载Java的IDE了! google慢慢地已经把重心放到Android Studio上了,所以有必要熟悉下这个IDE开发环境! 本篇博文会不定期地进行更新!对遇到的问题以及一些新

Android?Studio?优秀插件汇总

第一部分 插件的介绍 Google 在2013年5月的I/O开发者大会推出了基于IntelliJ IDEA java ide上的Android Studio.AndroidStudio是一个功能齐全的开发工具,还提供了第三方插件的支持.让开发人员更快速更好的开发程序. 第二部分 插件的安装 in Android Studio: go to File → Settings → Plugins → Browse repositories and search for 插件名 or in Androi

拿走不谢!22 个 Android Studio 优秀插件汇总

Google 在2013年5月的I/O开发者大会推出了基于IntelliJ IDEA java ide上的Android Studio.AndroidStudio是一个功能齐全的开发工具,还提供了第三方插件的支持.让开发人员更快速更好的开发程序. 插件的安装 in Android Studio: go to File → Settings → Plugins → Browse repositories and search for 插件名 or in Android Studio: go to

Android Studio插件汇总

转载:https://github.com/dreamlivemeng/androidstudio-plugins AndroidStudio 优秀插件汇总 欢迎大家推荐好的 Android 开源项目,可直接Commit,欢迎Star.Fork :) 第一部分 插件的介绍 Google 在2013年5月的I/O开发者大会推出了基于IntelliJ IDEA Java IDE上的Android Studio.AndroidStudio是一个功能齐全的开发工具,还提供了第三方插件的支持.让开发人员更

Android Studio环境解读

一.使用IDE开发APP的流程 要熟悉一个新的IDE,可依次完成以下流程: 二.相关术语解析 Dalvik: Android特有的虚拟机,和JVM不同,Dalvik虚拟机非常适合在移动终端上使用! AVD: (android virtual machine):安卓虚拟设备,就是安卓的模拟器 ADT: (android development tools)安卓开发工具 SDK:(software development kit)软件开发工具包,就是安卓系统,平台架构等的工具集合,如adb.exe