| |
|
开发:
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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |