左边选择当前断点之后,在右边点击【Disable until breakpoint hit】,选择我们之前有条件判断的断点,那么这个新的断点会在它所跟随的断点生效之后才会生效。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0RP8JX0c-1651117135407)(https://user-gold-cdn.xit 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》无偿开源 徽信搜索公众号【编程进阶路】 u.io/2019/11/4/16e34143d35416f1?imageView2/0/w/1280/h/960/ignore-error/1)]
3. 挂起线程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bwC7mMKB-1651117135409)(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-s6vuE1jX-1651117135409)(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-lyyNZOuQ-1651117135410)(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-c4zVzIxY-1651117135410)(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-wJSMNRwh-1651117135411)(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-Jafa5A9e-1651117135412)(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-m6GnCY3Q-1651117135412)(https://user-gold-cdn.xitu.io/2019/11/4/16e341a3ee396cd4?imageView2/0/w/1280/h/960/ignore-error/1)]
而且在 debug 的时候我们可以选择 debug 窗口中的【Evaluate expression】按钮来动态观察对象,点击之后会弹出一个计算框,我们可以输入任意当前作用域中的对象以及属性观察。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKlUavln-1651117135413)(https://user-gold-cdn.xitu.io/2019/11/4/16e341b086604305?imageView2/0/w/1280/h/960/ignore-error/1)]
不得不说这个真的很方便,以前遇到这种情况我只有一种方法就是:print 😂,当然这里不仅仅是观察对象,我们可以写任意代码观察我们想要的值,就像下图这样。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U2ClNR62-1651117135413)(https://user-gold-cdn.xitu.io/2019/11/4/16e341b3fc92465b?imageView2/0/w/1280/h/960/ignore-error/1)]
8. 增量更新
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Xpcmen1r-1651117135414)(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 我们会得到崩溃的异常栈信息,类似下图这样。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R8379Iec-1651117135414)(https://user-gold-cdn.xitu.io/2019/11/4/16e341c7ed481af8?imageView2/0/w/1280/h/960/ignore-error/1)]
我们可以全选复制,打开我们的 Android Studio,选择 Analyze → Analyze Stack Trace or Thread Dump,然后把异常栈信息粘贴进去,点击确定。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VfZtWvJG-1651117135414)(https://user-gold-cdn.xitu.io/2019/11/4/16e341cd3ca4d1a9?imageView2/0/w/1280/h/960/ignore-error/1)]
Android Studio 会在控制台显示这段异常栈信息,并且与现有代码 Link 在一起,我们可以点击跳转到问题所在行。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mtFKr4wN-1651117135415)(https://user-gold-cdn.xitu.io/2019/11/4/16e341d9f9622c62?imageView2/0/w/1280/h/960/ignore-error/1)]
好了这就是今天要分享的全部内容,关于更多详细的内容,大家可以点击【阅读原文】在油管上查看,真希望有大佬可以出一个【Android Studio 使用全攻略】,感觉自己对 AS 真的只是会用,但还有很多东西需要去学习和探索。😂
原文】在油管上查看,真希望有大佬可以出一个【Android Studio 使用全攻略】,感觉自己对 AS 真的只是会用,但还有很多东西需要去学习和探索。😂