每一个你不满意的现在,都有一个你没有努力的曾经。
Debug 能力是软件开发过程中分析代码、解决 Bug 的核心素质之一。知乎上有这么一段话说得很好(微改):“每个程序员,都是一个侦探,Log 是凶发现场的线索与证据,凶犯不是特别狡猾时,基本都可以找到真凶。但是总有例外,就需要还原现场 Debug,好比真凶在你的监控下再次模拟行凶,Debug 根据 Log 总能找到问题。打断点就像列举嫌疑人,侦探的第六感和经验至关重要。“
简介 Debug
Debug 即调试,又称除错,是发现和减少计算机程序错误的一个过程。
调试的基本步骤:
- 发现程序错误的存在
- 以隔离、消除的方式对错误进行定位
- 确定错误产生的原因
- 提出纠正错误的解决办法
- 对程序错误予以改正,重新测试
Android Debug
Android Studio 已是目前最主流的 Android 开发工具,其自带有强大的 Debug 功能,可以对运行在 Android Emulator 或相连 Android 设备上的应用进行调试,下面来一探究竟。
看看 Android Studio 提供的调试面板(试举一例):
大体提供了 7 个功能区,分别为断点管理区、线程栈帧区、调试功能区、求值表达式、对象变量区和变量观察区。详细看以下几个区:
断点管理区
从上往下来看,介绍主要几个:
Resume Program
该操作意思是恢复程序,有两种行为:
1.程序处在暂停状态下,点击该按钮将恢复程序运行。
2.很多情况下,会设置多个断点调试。某些情况时,需要从当前断点移动到下一个断点处,两个断点之间的代码被自动执行,这样就不需要一步步调试到下一个断点了。举例如下:
1 | public void test() { |
假设在第 2 行和第 4 行添加了断点。若此时我们的调试在第 2 行,点击该按钮执行操作,当前的调试位置会自动执行到第 4 行,即第 2 行到第 4 行之间的代码会自动被执行。
Pause Program
点击该按钮将暂停程序的执行。
Stop 'app'
点击该按钮,会关闭相关的脚本终止当前进程。在 Android 项目中,点击该按钮,意味着 App 结束运行。
View Breakpoints
点击该按钮会进入断点管理界面,在这里可以查看所有断点,管理或者配置断点的行为,如:删除、修改属性信息等,如下所示:
Mute Breakpoints
使用该按钮,来切换断点的状态:启动或者禁用。调试过程中,可以暂时禁用所有的断点,实现程序正常地运行。比如在调试过程中,不想让断点干扰关心的流程时,可以临时禁用断点。
Get thread dump
获取线程 Dump,点击该按钮将进入线程 Dump 界面如下:
调试功能区
该区提供了调试的主要操作,分别如下:
Show Execution Point
点击该按钮,光标将定位到当前正在调试的位置。
Step Over
单步跳过,点击该按钮后,程序向下执行一行。若当前行是一个方法调用,此行调用的方法被执行完毕后再到下一行。
Step Into
单步跳入,执行该操作后,程序向下执行一行。若该行有自定义的方法,则进入该方法内部继续执行,注意的是,若是类库中的方法,则不会进入方法内部。
Force Step Into
强制单步跳入,和 Step Into 功能类似,主要区别是,若当前行有任何方法,则不管该方法是自行定义还是类库提供的,都能跳入到方法内部继续执行。
Drop Frame
中断执行,并返回到方法执行的初始点,在这个过程中,该方法对应的栈帧会从栈中移除。换句话说,若该方法是被调用的,则返回到当前方法被调用的地方,并且所有上下文变量的值也恢复到该方法未执行时的状态。
Run to Cursor
忽视已经存在的断点,跳转到光标所在处。
求值表达式
Evaluate Expression
点击该按钮,会在当前调试的语句处嵌入一个交互式解释器,在其中,可以执行任何想要执行的表达式进行求值操作。
变量观察区
该区域将显示你所感兴趣的变量值。在调试模式下,可以通过 Add to Watches 将某个变量添加到观察区,该值的变化将会在变量观察区显示。
调试的两种方式
如上图,圈出来的部分从左到右为Debug 'app'
和Attach debugger to Android process
两种调试方式。
两者的区别主要如下:
- Debug ‘app’ :以调试模式安装运行,断点可以在运行前设置,也可以在运行后设置。
- Attach debugger to Android process:和 Debug 方式相比,可以将调试器 Attach 到任何正在运行的进程。
总之,个人觉得,Debug 能力的提升非一朝一夕之功,需要在各种项目里遭遇各种情况时锤炼,以上只是常用操作的小结,详细部分参照 Google 官方调试您的应用 和 Android Studio 代码调试大全。
至此,关于 Android Debug 的简单小结完毕。
本人才疏学浅,如有疏漏错误之处,望读者中有识之士不吝赐教,谢谢。
1 | Email: [email protected] / WeChat: Wolverine623 |
您也可以关注我个人的微信公众号 :码农六哥,第一时间获得博客的更新通知,或后台留言与我交流。