
进行 Android 应用开发之际,调试宛如于代码当中挑刺,有时一个漏洞有可能会耗费相当长的时间麻烦至极。

不少朋友惯于运用 Log 去打印日志,虽说简便省事且直接明了,然而一旦碰到繁杂场景便会呈现出能力不足的态势。
实际上,Android Studio 所自带的调试工具极为强大,特别是断点调试,要是运用得当,能够节省大量时间。

今天呢,就要来分享一下,一些我平常经常会用到的,断点调试技巧,从基础的,滑动监听日志,再到高级的,条件断点,以及变量修改,全部都是实战干货。


监听滑动事件,告别手动输 Tag

于 RecyclerView 的开发里头,我们时常得去监听用户的滑动举动。

如果要对列表滚动状态进行监控,传统的做法是在各处都写上 Log.d,之后在控制台对信息进行筛选,这是非常麻烦的。

较为不错的方式是借助 addOnScrollListener,在 onScrolled 这个回调当中进行统一的打印。

不少人感觉,控制台输出的信息繁杂,涵盖了时间,还有线程名,以及包含包名等无关联的内容。

我们能够将常用的 Tag 预先配置妥当,举例来说,设定一个“recycler_view”。


这样,于 Android Studio 的 Logcat 窗口里,直接去点右上角的过滤器,选那预设的 Tag,便可快速进行筛选,不用每回都手动输入来搜索了。

于 onScrollStateChanged 方法之中,同样能够借由同一个 Tag 去打印状态变化,像“state:”再添加上 newState,如此一来,整个滑动过程的监控便变得格外清晰了。
进入调试模式,断点基础操作
开启调试存在两种途径,其一为按压工具栏上那个呈小虫子模样的图标(Debug),其二是触碰旁边带有箭头的小虫子(Attach debugger to Android process)。
第二种适宜于 App 已然处于运行状态的情形,当点击之后,便会弹出 Choose Process 窗口,挑选好自身的应用进程并予以确认便可得到处置。


进入到调试模式当中的时候了,把在代码行号右边的空白地方进行单击,这样就能够打上断点予以标记了,重新再次去进行单击操作,便可以将其取消掉了。
断点是可以上下拖动的,方便调整位置。
App 运行至断点之处时,Debug 窗口会即刻展现当前线程以及变量信息。

在此处存在着一个具备很强实用性的小型功能,它被称作 Drop Frame,要是你在不经意间点击了 Step Over 从而跳过了想要进入的那个方法,且无需重新启动调试,只需点击一下 Drop Frame 便能够返回到方法调用之前的那个位置。
这个功能在 Android 10 以上版本都支持得很好。

条件断点与日志断点,效率直接翻倍

当进行循环代码调试之际,举例来说,存在一个循环需要运行 30 回,而我们仅仅关注处于第 2,0 次的那种状态。


如果每次中断都手动点击恢复,手都要点酸。
在这个时候,能够进行右键断点的操作,于弹出的窗口当中,去寻觅 Condition,输入 i == 20(变量名依据实际代码来加以调整),语言选择 Java 或者 Kotlin,然后点击 Done。

这样只有满足条件时才会中断,大大提升效率。

另有一种情形更为奇妙:我们期望查看某一位置处的变量数值,然而却并不愿于代码之中编写一连串的日志。

这时,能够运用日志断点,在右键盘点断点之处,将 Suspend 勾选予以取消,窗口展开之后,于 Log evaluated expression 里面,输入意欲打印之内容,例如"当前 i 的值:"加上 i。
在线程执行抵达此处之际,不会出现暂停的情况,仅仅会把表达式所产生的结果输出至控制台,随后持续运行。

代码干干净净,调试信息一个不少。

变量修改与断点管理,调试也能“作弊”

在进行调试的进程当中,我们甚至于能够直接去改变变量所具有的值,以此来对不同分支的逻辑展开测试。

在程序于断点之处处于暂停状态的时候,将 Variables 菜单进行打开操作,寻找到目标变量,以右键方式选择 Set Value 选项,如同把 i 等于 1 转变为 i 等于 28 这般,随后点击 Resume Program 按钮。
原本那代码得循环 30 次方可执行,如今点三次就能够跑完,极其适配快速地验证某类极端情形。

此外,在 Suspend 选项当中,能够去选择 All 或者 Thread,一旦选择了 All,那么就会致使所有线程暂停,进而整个 App 都会处于卡住的状态;要是仅仅是想要暂停当前线程的话,那就可以选择 Thread。
于繁复断点过多之际,心有不欲尽删之意,却又欲暂行禁用之法,可于断点管理界面,勾选 Disable until breakpoint is hit,择取另一断点以为触发条件,待条件契合之后,此断点方始生效。

按着 View Breakpoint 按钮点击,能够迅速地进入管理界面呀,进行那样的批量操作是特别便利的呢。


表达式求值与异常定位,细节决定成败

碰到复杂对象之际,于调试之时,能够右键点击代码,进而选择 Evaluate expression,要不然,在工具栏那儿寻找到计算器图标。
能够输入任何合法表达式的弹出窗口之中,像是查看 textList 的内容,点击 Evaluate 按钮,结果会于下方区域显示出来。


这个功能比在 Variables 菜单里一层层翻找要快得多。
谈到异常捕捉,在 Android Studio 调试器碰到 NullPointerException 这类常见异常之际,可精准定位到出错的代码行,而且在变量出现异常之前,就能监测到可疑的值。

最为末尾之际提出来一种小贴士,要是在进行调试之时发觉某一段逻辑执行的顺序跟你预先所设想的情形并不一样,那么能够结合 Drop Frame 以及条件断点去回溯执行的路径,通常情况下很快便能够找寻到问题的根源所在。

在日常进行开发期间,将上面所提及的这些断点方面的技巧熟练运用起来,那么调试时的效率起码能够提高一倍。


无需再凭借满屏的 Log 输出了,也无需反复去重启 App,关键之处在于整个过程更拥有掌控感了。

当下次碰到棘手的 bug 之际,不妨将调试器开启,去试试那些方法,你会发觉在排查问题之时,也能够做到轻松且优雅。

Comments NOTHING