Android Studio Debug 的 9 个小技巧

作者: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开发面试专题资料,高级进阶架构资料帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习

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

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

时间: 2024-11-05 23:25:38

Android Studio Debug 的 9 个小技巧的相关文章

Android studio Debug效率提升

Android studio Debug效率提升,可以在控制台打印log的同时而不暂停程序的运行,尤其是当遇到复杂交互的时候,比如滑动,拖动,这时候程序暂停执行是特别恶心的.其实你可以更新打印信息而不需要重新编译或者部署. Suspend,找到打得断点,然后右键就会出现下面界面 (or ?+?/Ctrl+F8) ,把Suspend选项的勾选去掉即可.飞一般的Debug吧.......

Android Studio debug调试

本人使用的Android Studio版本为1.2.2,版本不同可能小区别,但是大致的功能没有改变. 快捷键: Alt+F8  Evaluate Expression---debug时选中查看值 F8 Step Over---相当于eclipse的F6跳到下一步 Shift+F8 Step Out---相当于eclipse的F8跳到下一个断点,也相当于eclipse的f7跳出函数 F7 Step Into---相当于eclipse的F5就是进入到代码 Alt+Shift+F7 Force Ste

Android Studio和 adb 的一些常用技巧

工欲善其事,必先利其器. 最近因为换了Mac,很多地方有些不太适应,刚好最近有想写一篇记录一些小工具技巧的文章,顺便就把Mac中AS常用的快捷键也一并对应记录起来吧. 以下为Android开发中,比较常用的小技巧,一时间想不起太多,所以先这样,以后有时间持续更新. IntelliJ Idea常用的快捷键 key xwin mac os x 10.5 + desc SmartType Ctrl + Shift + 空格 ? + ? + 空格 提示与补全 Show Intention Actions

Android开发的那些坑和小技巧

1.android:clipToPadding 意思是控件的绘制区域是否在padding里面.默认为true.如果你设置了此属性值为false,就能实现一个在布局上事半功陪的效果.先看一个效果图. 上图中的ListView顶部默认有一个间距,向上滑动后,间距消失,如下图所示. 如果使用margin或padding,都不能实现这个效果.加一个headerView又显得大材小用,而且过于麻烦.此处的clipToPadding配合paddingTop效果就刚刚好. 2.match_parent和wra

Android Studio debug调试教程

昨天公司领导批评我不会在Android  studio上debug    所以 今天利用休息的时间研究了一下  再此写一篇实用的文章希望大家喜欢 一.自己写的代码例子 protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); for (int i = 0; i < 10; i++) { //获取当前

Android Studio Debug

小米4usb调试怎么打开?miui6进入开发者模式想要打开USB调试首先开启开发者模式.过去在MIUI V5版本时,小米手机开启开发者模式的方法是连续点击Anroid版本号.不过最新上市的小米4都搭载了MIUI6,很多网友都发现点击手机版本号开启开发者模式的方法行不通了.其实这是MIUI6的一个修改,在MIUI6里开启开发者模式不再是点击Android版本号,而是点击MIUI版本号,连续点击几下就可以开启开发者模式了.然后到退回到设置-->其它高级设置-->开发者选项,进去之后就可以打开小米4

Android开发中padding使用一个小技巧

在安卓应用开发中,有时要用到状态按钮(可点击时与不可点击时的背景不相同),而且产品要求的按钮大小是固定的.在不同的手机上按钮的文字显示可能有些异常(主要是在给按钮做背景时很容易出现),此时我们怎么处理呢?我们可以用到padding这个属性. 看看小例子: --------------------------就一个按钮,但是background是用xml文件写的状态selector-------------------------------- <Button android:id="@+i

Android开发中常用的一些小技巧(转载)

http://www.jb51.net/article/61135.htm Activity.startActivities() 常用于在应用程序中间启动其他的Activity. TextUtils.isEmpty() 简单的工具类,用于检测是否为空 Html.fromHtml() 用于生成一个Html,参数可以是一个字符串.个人认为它不是很快,所以我不怎么经常去用.(我说不经常用它是为了重点突出这句话:请多手动构建 Spannable 来替换 Html.fromHtml),但是它对渲染从 we

Android Studio debug使用release的签名

当我们在做微信微博sdk分享的时候调试非常麻烦,因为要使用对应的签名版本才能调用sdk成功. 当我们使用AndroidStudio的Gradle之后会很简单的解决这个问题. 1.我们把签名文件放到工程根目录下(这样做是为了保持路径的统一) 2.在Gradle中引入如下代码: //配置keystore签名 signingConfigs { release { storeFile file("TimeHutKeyStore") storePassword "joyful888&q