码迷,mamicode.com
首页 > 移动开发 > 详细

Android Studio Debug 的 9 个小技巧

时间:2019-11-09 00:30:32      阅读:32      评论:0      收藏:0      [点我收藏+]

标签:网上   快速   打开   express   androi   过滤   代码   语句   kotlin   

作者:wanbo

技术图片

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

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

1. Log 过滤和折叠

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

技术图片

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

技术图片

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

技术图片

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

技术图片

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

技术图片

2. 自定义断点执行条件

技术图片

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

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

技术图片

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

技术图片

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

技术图片

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

技术图片

3. 挂起线程

技术图片

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

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

4. 动态打印

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

技术图片

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

5. 断点分组

技术图片

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

6. 断点上一步

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

技术图片

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

7. 观察对象

技术图片

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

技术图片

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

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

技术图片

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

技术图片

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

技术图片

8. 增量更新

技术图片

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

9. 错误栈分析

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

技术图片

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

技术图片

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

技术图片

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


感谢大家能耐着性子,看完我啰哩啰嗦的文章。

愿与各位在Android开发岗位的同胞们互相交流学习,共同进步!

在这里我也分享一份自己收录整理的Android学习PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

如果你有需要的话,可以点赞+评论关注我

技术图片

技术图片

技术图片

Android Studio Debug 的 9 个小技巧

标签:网上   快速   打开   express   androi   过滤   代码   语句   kotlin   

原文地址:https://blog.51cto.com/14573572/2448825

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!