小技巧 _ 在 Android Studio 调试应用,android开发基础视频教程

一段代码会被不同的路径触发,这种情况在应用开发中并不少见。如果您发现了只会在某个特定路径才会触发的 Bug,随意为其打一个断点会造成许多无意义的运行中断。为了应对这种情况,您可以使用依赖断点。依赖断点只会在特定的断点被触发后才会激活。举例来说,您可以创建一个只会在您感兴趣的路径中被触发的断点,而其他断点便可以依赖此断点,从而使这些断点也只会在您所感兴趣的路径中被触发。

为了设置依赖断点,您需要右击路径中的第二个断点,并打开  More  菜单。在  Disable until breakpoint is hit  选框中,选中您想要依赖的断点:

您会发现断点的图标发生了改变:

现在,您的应用只会在前一个断点被触发后才会在此断点停止运行。

这个功能也可以用在其他使用了条件断点的地方,从而可以避免复制粘贴条件断点到新位置的操作。

挂起线程

如果您在调试一个多线程应用,您将会注意到,在默认情况下断点将会挂起所有线程,但有时您可能不希望它这样做。举例来说,您可能想要验证某个后台线程阻塞时,应用的其他功能是否能够正常工作,或者您希望了解在执行一个后台任务时,UI 能不能够持续进行渲染。

为了仅挂起当前线程,您需要打开断点选项,并且选中  Suspend  设置中的  Thread  选项:

Evaluate and log (评估与记录)

有些时候,相比起在断点处停止运行,您可能更希望看到一些有关应用状态的信息。也许您会通过在代码中添加 println 语句来做到这一点,但这种方法需要重新编译应用,您其实可以利用断点本身来进行评估与记录。

为了做到这点,您需要在断点选项中禁用  Suspend  并启用  Evaluate and log :

现在,您可以在输入框中添加任何代码表达式,相应内容会被评估并记录至控制台。

如果您只是想快速验证断点是否触发并且不在乎其中的细节信息,可以使用  “Breakpoint hit” 信息 来记录断点的触发事件。您甚至可以使用 Shift + 添加断点的方式来让这一操作变得更加快捷。

禁用断点

禁用断点 (并非删除断点),可以右键点击断点并从弹框中取消选中 Enabled 选框。您也可以通过按住 Alt (在 Mac 上是 Option) 并点击断点,从而更快速地禁用断点。

断点分组

您一定遇到过这种场景: 您正在解决一个 Bug,并为此添加了几个断点,但是发现自己一时间没什么头绪,所以您就去解决别的 Bug 了。然而,很快您就开始触发为了解决第一个 Bug 所添加的断点。触发无关的断点不但会让人困扰,还会把您带离您的调试流程。

您可以使用断点分组来让开发过程更舒心一些。

当您的程序运行到第一个与当前调试流程无关的断点时,右击并打开  More  菜单,这时您会看到一个所有断点的列表,您可以在这里复选所有与第一个 Bug 相关的断点:

右击选中的断点,并选择  Move to group  接下来   Create new  并为新的分组命名,例如以您正在处理的 Bug 命名。现在,您可以仅通过点击轻松地启用和禁用所有的断点了。

当然,您也可以在解决了 Bug 之后,使用分组功能删除所有相关的断点。

Drop frame (丢弃当前帧)

有些时候,当您浏览挂起的代码时,可能会意外跳过某个本应该进入的方法。如果您的设备运行的是 Android 10 或者更高版本,您可以通过点击调试工具栏中的  Drop Frame  按钮来进行回溯:

这个功能会把您从当前的方法带回到其开始执行前的节点,从而给您一个重新进入该方法的机会。

此功能并不是 “时间机器”。如果您正处于一个长函数的中间位置,而它此前已经执行了许多工作 (例如,修改了当前类的状态)。在您丢弃当前帧时,这类操作所产生的改变不会被撤销。

Mark object (标记对象)

有时候,您会想要跟踪某些特定类型实例的生命周期。本例中,要跟踪的对象有一个哈希值: @10140:

为了能够在这个对象再次出现时可以认出它来,您可能已经掏出纸笔准备记下这个数字了。不过您也可以选择另一种方式: 右击该对象,点击  Mark Object  为其添加标签。

这样一来,无论被标记的对象出现在调试窗口的任何地方,它都会带有您添加的标签以方便辨认。这里我们为该对象添加一个 " myItem " 标签:

更棒的是,就算您处于完全不同的上下文,无法触及到刚才的对象,您也可以在  Watches  窗口对其进行查看。无论您处在什么位置,只要触发断点,就可以在  Watches  窗口添加后缀为 " _DebugLabel " 的标签 (不用担心自己会不记得后缀的内容,这里有自动补全):

现在,您可以在任何地方使用  Watches  窗口来观察该类型对象的状态。

您也可以将此功能与条件断点组合。举例来说,您可打一个断点,右击并为其设置一个条件来检查打了标签的对象:

这样一来,就不用在进入包含特定实例的范围之前跳过一堆断点,代码会运行到合适的地方再停止:

Evaluate expression (评估表达式)

尽管  Variables  和  Watches  窗口对于跟踪某个显式值时已经十分好用,但您有时候还是会想要更加自由地探索您的代码,这时候就轮到评估表达式功能登场了。当您正处于某个断点时,您可以使用调试工具栏中的  Evaluate expression  按钮来访问这一功能。

您可以在 Expression 输入框中输入任何表达式,点击 Evaluate 按钮就可以对其进行评估。当然,如果您评估了一个对象,在评估完成后,您就可以在 Result 部分浏览该对象的详细信息:

评估表达式弹窗可能会以单行模式打开,您可以通过点击  Expand  来将其扩展为多行模式:

现在,您可以输入复杂的多行表达式,其中可以包含变量、if 语句等各种内容:

Apply changes

前面讲过,当您使用条件断点时,会需要评估一个表达式;即便代码没有在断点停止,调试器依然需要执行评估操作。如果您在一个非常紧密的循环中运行评估操作,例如游戏中的动画处理,则可能导致应用停顿。尽管条件断点很有用,但在某些情况下您可能无法依靠它们。

解决此问题的一种方法是将条件表达式添加到代码中,并使用无操作 (no-op) 表达式,从而使其可以附加断点:

【附】相关架构及资料

资料领取

点击这里免费获取Android IOC架构设计等资料

领取获取往期Android高级架构资料、源码、笔记、视频。高级UI、性能优化、架构师课程、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter全方面的Android进阶实践技术,群内还有技术大牛一起讨论交流解决问题。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-uDhg3LL4-1711013709799)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值