IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android Studio Debug 的 9 个小技巧,挑战阿里社招 -> 正文阅读

[移动开发]Android Studio Debug 的 9 个小技巧,挑战阿里社招

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rxDxcyiE-1630818993081)(https://user-gold-cdn.xitu.io/2019/11/4/16e3413745054354?imageView2/0/w/1280/h/960/ignore-error/1)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9jAwhZtE-1630818993084)(https://user-gold-cdn.xitu.io/2019/11/4/16e3413e54157e9e?imageView2/0/w/1280/h/960/ignore-error/1)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WwAdfxla-1630818993085)(https://user-gold-cdn.xitu.io/2019/11/4/16e34140ceb6c58e?imageView2/0/w/1280/h/960/ignore-error/1)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-h8eYwney-1630818993087)(https://user-gold-cdn.xitu.io/2019/11/4/16e34143d35416f1?imageView2/0/w/1280/h/960/ignore-error/1)]

3. 挂起线程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HI0r324f-1630818993089)(https://user-gold-cdn.xitu.io/2019/11/4/16e34157736705f8?imageView2/0/w/1280/h/960/ignore-error/1)]

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

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

4. 动态打印

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Go3qYLk7-1630818993090)(https://user-gold-cdn.xitu.io/2019/11/4/16e34160f795395a?imageView2/0/w/1280/h/960/ignore-error/1)]

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

5. 断点分组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gUS49xGd-1630818993090)(https://user-gold-cdn.xitu.io/2019/11/4/16e3416a300a8c71?imageView2/0/w/1280/h/960/ignore-error/1)]

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

6. 断点上一步

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5SjUBl7a-1630818993091)(https://user-gold-cdn.xitu.io/2019/11/4/16e3418787a95e8d?imageView2/0/w/1280/h/960/ignore-error/1)]

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

7. 观察对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-a063eLtF-1630818993092)(https://user-gold-cdn.xitu.io/2019/11/4/16e341970565ae3a?imageView2/0/w/1280/h/960/ignore-error/1)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pgvYheuZ-1630818993092)(https://user-gold-cdn.xitu.io/2019/11/4/16e3419c98a17f31?imageView2/0/w/1280/h/960/ignore-error/1)]

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TAR8LoNp-1630818993093)(https://user-gold-cdn.xitu.io/2019/11/4/16e341a3ee396cd4?imageView2/0/w/1280/h/960/ignore-error/1)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b9Xyc1KB-1630818993094)(https://user-gold-cdn.xitu.io/2019/11/4/16e341b086604305?imageView2/0/w/1280/h/960/ignore-error/1)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AZWFIwjP-1630818993094)(https://user-gold-cdn.xitu.io/2019/11/4/16e341b3fc92465b?imageView2/0/w/1280/h/960/ignore-error/1)]

8. 增量更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3yezO6Xm-1630818993095)(https://user-gold-cdn.xitu.io/2019/11/4/16e341b874ac9beb?imageView2/0/w/1280/h/960/ignore-error/1)]

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

9. 错误栈分析

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

题外话

不管怎么样,不论是什么样的大小面试,要想不被面试官虐的不要不要的,只有刷爆面试题题做好全面的准备,当然除了这个还需要在平时把自己的基础打扎实,这样不论面试官怎么样一个知识点里往死里凿,你也能应付如流啊

CodeChina开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》

这里我为大家准备了一些我工作以来以及参与过的大大小小的面试收集总结出来的一套进阶学习的视频及面试专题资料包,主要还是希望大家在如今大环境不好的情况下面试能够顺利一点,希望可以帮助到大家~

最后如果马化腾把腾讯给你一天,你会来做什么?欢迎评论区讨论。

,希望可以帮助到大家~

[外链图片转存中…(img-XJ30XuZy-1630818993095)]

最后如果马化腾把腾讯给你一天,你会来做什么?欢迎评论区讨论。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:16:17  更:2021-09-06 11:18:47 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:54:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码