您当前的位置:首页 > 电脑百科 > 程序开发 > 移动端 > Android

Android Studio Debug 的 9 个小技巧

时间:2019-11-11 14:52:55  来源:  作者:

作者:wanbo

Android Studio Debug 的 9 个小技巧

 

周末看 Android Dev Summit '19 的视频的时候,看到一章关于 Android Studio Debug 的介绍,有很多日常非常有用的小技巧,学习了这些小技巧能很大程度的降低我们 Debug 的成本,快速定位问题的本质,今天就向大家介绍一下 Android Studio Debug 的 9 个小技巧。

没关注的小伙伴记得关注,如果觉得这些文章有点意思,记得分享转发评论点赞!

1. Log 过滤和折叠

有时候 Logcat 中 log 的信息很长,同时还有些我们不需要的信息也打印出来,例如下图中的【时间+线程 ID】。

Android Studio Debug 的 9 个小技巧

 

这个时候我们可以点击 Logcat 窗口上的【设置】按钮,设置一条 Log 需要显示哪些关键信息,可设置的项有:时间、线程ID、包名、Tag name。我们可以根据自己的需要控制显示,并且下面还会有一条 Sample Log 提供设置后的预览效果,就像下图中这样。

Android Studio Debug 的 9 个小技巧

 

日常开发的时候我们还会遇到另一种情况,比如根据当前 UI 的渲染情况,我们需要时刻打印 UI 的某个值,来帮助我们观察 UI,同时当到达某种条件的时候,输入一条我们得到的【结果 log】。也就是说在获得我们的【结果 log】之前会有很多没用但是又必须打印的 log,这样当我们需要查找【结果 log】的时候就会非常麻烦。

Android Studio Debug 的 9 个小技巧

 

就像上图中这样,我们的【结果 log】被上下【循环打印 log】包围了,很难一下子找出来,这时候我们可以选关键字【右键】,选择【Fold Lines Like This】,如下图所示。

Android Studio Debug 的 9 个小技巧

 

这样我们相同关键字的 log 就会被折叠,当然也可以展开查看详细 log。

Android Studio Debug 的 9 个小技巧

 

2. 自定义断点执行条件

Android Studio Debug 的 9 个小技巧

 

我们来看上面这段代码,通过字面意思我们可以得知:这是一个点击事件执行的方法,点击发生后通过 NavController 从当前 HomeFragment 跳转到 EmailFragment。然后我们在第一行打了一个断点,我们已经得知当 email 的 subject 包含 【Bonjour】关键字的时候,这段代码会发生崩溃,反之不包含则不会发生崩溃,所以我们不需要每次断点都生效。

这里我们可以右键断点,在 Condition 里输入我们的条件判断语句,当条件允许的时候,断点才生效。条件语句的代码支持 Kotlin 和 JAVA 两种语言的写法,如下图所示。

Android Studio Debug 的 9 个小技巧

 

然后如果我们想在跳转到 EmailFragment 之后进一步去追踪问题,于是我在 EmailFragment 的 onCreate 方法打了一个断点(如下图所示),然后这里还会遇到我们之前说的问题:不符合条件的时候断点也会生效,这时候我们该怎么办呢?

Android Studio Debug 的 9 个小技巧

 

我们可以在这个断点上面,右键、点击更多

Android Studio Debug 的 9 个小技巧

 

左边选择当前断点之后,在右边点击【Disable until breakpoint hit】,选择我们之前有条件判断的断点,那么这个新的断点会在它所跟随的断点生效之后才会生效。

Android Studio Debug 的 9 个小技巧

 

3. 挂起线程

Android Studio Debug 的 9 个小技巧

 

当我们右键任意一个断点的时候,会有一个 Suspend 选项【All、Thread】,All 也就意味着当我们在一个多线程的应用中 debug 问题的时候,一旦这个断点生效,所有的线程都会被挂起,Thread 表示只挂起当前线程。所以当我们在某个后台线程中 debug 问题的时候就可以选择 Thread,这样就不会在 debug 的时候阻塞主线程的正常功能。

还有一个打开关闭断点的快捷键也分享一下:windows 用户 Alt + Click ,mac Option + Click 。

4. 动态打印

详细很多人包括我之前在 debug 的时候,都会在需要 debug 的地方增加 print 输出一下信息供自己排查错误,这里提供一种快捷方便的方法,可以既不污染我们的代码,又可以随时输出任意信息。

Android Studio Debug 的 9 个小技巧

 

如上图所示,在需要打印的地方增加断点,然后取消所有线程的挂起,选择【Evaluate and log】,属于我们需要打印的语句,当代码执行到断点的时候,不会暂停,而会根据我们设置的打印信息输出 log,是不是很方便?

5. 断点分组

Android Studio Debug 的 9 个小技巧

 

通常遇到一个问题的时候,我们需要增加很多断点去追踪问题的原因,当问题解决之后,往往会忘记取消这些断点,导致在某次调试的时候,设备会被之前的断点所暂停,会让我们很无语。这里我们可以 debug 的时候在某个断点上:右键、更多,然后选择这个问题所有相关的断点,将它们分到同一个 Group 里面,那么这一个组的断点就可以统一开关、统一删除。

6. 断点上一步

说到这个真的很痛心,常常因为自己在 debug 的时候,由于下一步点击的太快了而错过了问题关键行,只能重新运行一次代码,重新 debug 然后自己一次次点击下一步。

Android Studio Debug 的 9 个小技巧

 

在运行 Android 10 的设备上,debug 界面中提供了一个叫【Drop frame】的按钮,可以供我们跳出当前方法栈,返回上一步,这样就会避免我们因为错过断点而不得不重新运行代码。

7. 观察对象

Android Studio Debug 的 9 个小技巧

 

当我们 debug 的时候,可以从 debug 窗口中观察当前作用域中的对象以及对象的属性,有时候我们会观察在不同页面是否是同一个对象,之前我的做法很粗暴...就是找张纸,把这个对象的 ID 记下来,然后在另一个页面 debug 看 ID 是否一致

Android Studio Debug 的 9 个小技巧

 

这里我们可以在对象上右键、选择【Mark Object】之后会让你自定义一个 Label,然后在整个 debug 期间,相同的对象会以你设置的 Label 为 name 出现,帮助我们方便的分析是否是统一对象。

顺便提一下,在任意一段代码上,点击行号,可以从当前断点快速执行到目标行并暂停,这个我真是第一次知道,感觉之前 Android Studio 都白用了

Android Studio Debug 的 9 个小技巧

 

而且在 debug 的时候我们可以选择 debug 窗口中的【Evaluate expression】按钮来动态观察对象,点击之后会弹出一个计算框,我们可以输入任意当前作用域中的对象以及属性观察。

Android Studio Debug 的 9 个小技巧

 

不得不说这个真的很方便,以前遇到这种情况我只有一种方法就是:print ,当然这里不仅仅是观察对象,我们可以写任意代码观察我们想要的值,就像下图这样。

Android Studio Debug 的 9 个小技巧

 

8. 增量更新

Android Studio Debug 的 9 个小技巧

 

我试了一下,这两个按钮是真的很好用啊,比重新全量运行应用真是快了不少,非常方便。

9. 错误栈分析

通常我们 App 中会继承一下线上 bug 反馈的 SDK 比如 bugly,在 bugly 我们会得到崩溃的异常栈信息,类似下图这样。

Android Studio Debug 的 9 个小技巧

 

我们可以全选复制,打开我们的 Android Studio,选择 Analyze → Analyze Stack Trace or Thread Dump,然后把异常栈信息粘贴进去,点击确定。

Android Studio Debug 的 9 个小技巧

 

Android Studio 会在控制台显示这段异常栈信息,并且与现有代码 Link 在一起,我们可以点击跳转到问题所在行。

Android Studio Debug 的 9 个小技巧

 

好了这就是今天要分享的全部内容,关于更多详细的内容,大家可以关注我,进入我的主页查看,改天考虑出一个【Android Studio 使用全攻略】,感觉很多人对 AS 真的只是会用,但还有很多东西需要去学习和探索。



Tags:Android Studio   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
日期:2020.06.01说明:简单描述如何编译1 在Module的build.gradle添加编译jar代码task makeJar(type: Copy) { //删除存在的 delete '../CommonLib/libXXX.jar'...【详细内容】
2020-06-02  Tags: Android Studio  点击:(125)  评论:(0)  加入收藏
aar是Android studio下打包Android工程中src、res、lib后生成的文件,aar包导入其他Android Studio 工程后,其他工程可以方便引用源码。一、创建一个工程,选择Add No Activity...【详细内容】
2019-12-05  Tags: Android Studio  点击:(138)  评论:(0)  加入收藏
1、android-butterknife-zeleznyandroid-butterknife-zelezny 是根据butterknife定制的一款插件,能够方便快速初始化,对于我来说是开发必备,本人也对此插件进行了一些优化,个人...【详细内容】
2019-11-11  Tags: Android Studio  点击:(110)  评论:(0)  加入收藏
周末看 Android Dev Summit '19 的视频的时候,看到一章关于 Android Studio Debug 的介绍,有很多日常非常有用的小技巧,学习了这些小技巧能很大程度的降低我们 Debug 的成本,快速定位问题的本质,今天就向大家介绍一下 And...【详细内容】
2019-11-11  Tags: Android Studio  点击:(181)  评论:(0)  加入收藏
一、下载安装打开这个网址,里边有AndroidStudio的各种版本下载:http://www.android-studio.org/index.php/component/content/category/88-download二、界面预览下图是Androi...【详细内容】
2019-09-18  Tags: Android Studio  点击:(273)  评论:(0)  加入收藏
作者: 王菜花原文: https://juejin.im/entry/5998090ff265da248a7a6bde最近改用 Android Studio 3.5 preview ,顺便整理一下,常用的插件。GsonFormat将 Json 字符串快速转成...【详细内容】
2019-08-28  Tags: Android Studio  点击:(482)  评论:(0)  加入收藏
▌简易百科推荐
今天面试遇到同学说做过内存优化,于是我一般都会问那 Bitmap 的像素内存存在哪?大多数同学都回答在 java heap 里面,就比较尴尬,理论上你做内存优化,如果连图片这个内存大户内存...【详细内容】
2021-12-23  像程序那样思考    Tags:Android开发   点击:(8)  评论:(0)  加入收藏
Android logcat日志封装logcat痛点在Android开发中使用logcat非常频繁,logcat能帮我们定位问题,但是在日常使用中发现每次使用都需要传递tag,并且会遇到输出频率很高的log,在多...【详细内容】
2021-12-22  YuCoding    Tags:Android   点击:(8)  评论:(0)  加入收藏
对项目的基本介绍 1.整个框架主要是给MVVM框架使用的,自己写完interface接口后,通过自定义的注解就能自动生成接口方法 2.用Kotlin的Flow去代替Rxjava,因为我发现RxJava功能很...【详细内容】
2021-12-08  网易Leo    Tags:Android开发   点击:(17)  评论:(0)  加入收藏
前言在Android开发过程中,有些时候会根据需要引用别的项目到当前项目里面,而且以Module形式引用。所以本篇博文就来分享一下怎么以Module形式引用别的项目到当前项目中,方便开...【详细内容】
2021-12-07  网易Leo    Tags:Android开发   点击:(22)  评论:(0)  加入收藏
作者:fundroid这篇文章偏阅读一些,大家可以了解下 Android 的一些最新动向。每年9/10月份 Google 都会举行约为期2天的 Android Dev Summit,在活动上 Google 的技术专家们会分...【详细内容】
2021-11-30  像程序那样思考    Tags:Android开发   点击:(15)  评论:(0)  加入收藏
一、 准备工作1、安装JDK,下载地址(可能需要一个oracle账号,大家百度一下或者自行注册一个就行。尽可能选择8或者11,这两个是长期版本)Java SE | Oracle Technology Network | Or...【详细内容】
2021-11-23  永沧    Tags:Android   点击:(28)  评论:(0)  加入收藏
使用Maven Publish Plugin插件。(官方支持)一、在Library的build.gradle中配置plugins { id 'com.android.library' id 'kotlin-android' id 'k...【详细内容】
2021-11-05  羊城小阳    Tags:Android   点击:(37)  评论:(0)  加入收藏
谷歌离推出Play Store应用程序的新数据隐私部分又近了一步。应用程序开发人员现在可以通过谷歌在Play控制台的新 "数据安全表 "填写相关细节。该公司表示,所需信息将从2022年...【详细内容】
2021-10-20    中关村在线  Tags:安卓   点击:(58)  评论:(0)  加入收藏
架构究竟是什么?如何更好的理解架构?我们知道一个APP通常是由class组成,而这些class之间如何组合,相互之间又如何产生作用,就是影响这个APP的关键点。细分的话我们可以将其分为类...【详细内容】
2021-09-17  像程序那样思考    Tags:Android架构   点击:(52)  评论:(0)  加入收藏
概述当Android应用程序需要访问设备上的敏感资源时,应用程序开发人员会使用权限模型。虽然该模型使用起来非常简单,但开发人员在使用权限时容易出错,从而导致安全漏洞。本文中,...【详细内容】
2021-09-07  SecTr安全团队    Tags:Android开发   点击:(66)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条