接触Android(以及Android Studio)即将四个月,接触了从零开始的项目也接触了开发了好几年的项目,当遇到一个BUG时,我发现我与老员工们之间的差距很大很大,他们能很快的找到问题的所在,一方面肯定是他们的经验所在,另外一方面就是Debug的技巧所在了,所以掌握IDE的调试技巧对于一个程序员来说真的十分重要。
目录
1. 调试窗口介绍
不同的Android studio版本,其对应的图标会有所不同,比如3.3与3.2就有所不同,但是虽图标不一样,其对应的作用与功能基本一样。实践操作多了,自然会绕记于心?。
- 从暂停状态下继续运行应用。
- 退出调试状态。
- 查看断点信息。(点击进入如下页面)
- mute breakpoints 暂时忽略其他断点。
- 定位到当前正在调试的位置。
- Step Over 一步步前进下一行代码,遇到方法时不会进入方法内部,直接执行完代码。
- Step Into 一步步执行代码,遇到方法会进入方法内部第一行(但不会进入系统方法)。
- Force Step Into 与Step Into类似,遇到系统方法时也会进入方法内部。
- Step Out 跳出方法,前进到方法之外的下一行。
- Run to Cursor 执行到光标处,遇到断点会停下,另外一种Force Run to Cursor强制跳转到光标处遇到断点不会暂停。(详细信息如下图所示)
- Evaluate Expression 计算表达式,遇到断点暂停时可以通过赋值或者表达式改变状态,如下图:(详细信息如下图所示)
- Variables 变量区 可以看到所有变量信息,调试状态下在变量区点击鼠标右键New Watch新增要查看的变量,或者点击变量区左上角的绿色按钮来添加。(详细信息如下图所示)
2. 各类断点介绍
Android Studio给我们提供了多种断点来方便调试,见下图所示:
鼠标右键点击断点查看断点配置信息:(如下图所示)
Enabled: 如果您想指示 Android Studio 暂时忽略该监视点,可以取消选择此选项。取消此选项后代码在执行到这一步时不会进入断点调试状态,但Android Studio 仍会保存该监视点,以便您稍后在调试会话中访问。如下图所示,取消此选项后断点中间变成了绿色(如下图所示)。(备注:Android Studio 3.3版本就不是中间出现绿点了,而是出现中间镂空了)
Suspend: 默认情况下,Android 系统会在其访问您分配给监视点的内存块时暂停应用进程。如果您不需要此行为,可以取消选择此选项 - 取消选择时会出现一些附加选项,您可以利用这些选项来自定义系统与监视点进行交互时的行为:Log message to console 和 Remove [the watchpoint] once hit。(如下图所示):
2.1 条件断点:
为断点设置条件,设置好条件后断点右下角出现一个灰色问号?,只有满足条件时才执行断点,如下图所示,在for循环内,当i==0,1,2时,不会进入断点,当i==3时,进入断点:
2.2 Log断点
取消勾选Suspend, 然后勾选Evaluate and log,输入调试信息,输出的调试点击Console查看,如下图所示
2.3 异常断点
添加异常断点步骤:
1. 在断点信息上选择3.Java Exception Breakpoints 。
2. 通过异常名字来搜索异常类型。
3. 点击OK,添加该类型异常断点成功(ArithmeticException), 在断点信息中查看。
4. 运行程序,当遇到我们添加的异常类型时(比如我们刚刚添加的ArithmeticException异常),自动定位到该位置。
遇到该异常后自动进入该断点,无需找地方设置断点。
3. 在代码中写入日志消息(打Log)
使用系统日志,系统日志会在您调试应用时显示系统消息。这些消息包括运行在设备上的应用产生的信息。如果您想利用系统日志来调试应用,要确保您的代码能够在应用处于开发阶段时写入日志消息和打印针对异常的堆叠追踪。
3.1 各种系统日志信息的详解
利用Log类在代码中写入日志消息:(优先级从低到高排序)
- Log.v(String, String): (详细 verbose) 用于打印最为琐碎、意义最小的日志信息,优先级最低。
- Log.d(String, String): (调试 debug) 打印调试信息,优先级别高于verbose。
- Log.i(String, String):(信息 information) 打印比较重要的信息,有助于你分析的数据,优先级高于debug。
- Log.w(String, String):(警告 warning) 用于打印警告信息,提示程序在这有潜在危险,优先级高于info。
- Log.e(String, String): (错误 error) 用于打印程序中的错误信息,一般代表着程序出现了严重的问题了,必须尽快修复,优
先级最高
3.2 打Log信息的快捷方式
只需要输入logd,然后按下Tab键,Android Studio就会自动补全一条完整的打印语句,同样logv,logi, logw, loge都适合这个快捷方法。在onCreate()方法外面输入logt,然后按下Tab键,就会自动以当前的类名作为值自动生成一个TAG常量。
如上图所以,private static final String TAG = "$classNames";
按下Tab键,自动生成一个TAG常量,如下图所示:
4. Android Studio 3.3的图标更新
前几天我把Android Studio 升级到了3.3 版本,发现很多图标都变了!
比如,断点变成了这样(见下图所示):
调试窗口也变样了(见下图):
虽然图标变了,但是用法都是跟之前一样的:
1. 恢复程序运行。
2. 终止程序运行。
3. 查看所有断点信息。
4. 暂时忽略所有断点,点击后所有断点变成灰色,断点失效。重新debug程序后,所有断点恢复功能。
5. 点位到当前调试的位置。
6. Step Over 一步步前进下一行代码,遇到方法时不会进入方法内部,直接执行完代码。
7. Step Into 一步步执行代码,遇到方法会进入方法内部第一行(但不会进入系统方法)。
8. Force Step Into 与Step Into类似,但是遇到系统方法时也会进入方法内部。
9. Step Out 跳出方法,前进到方法之外的下一行。
10. Run to Cursor 执行到光标处,遇到断点会停下,另外一种Force Run to Cursor强制跳转到光标处遇到断点不会暂停。
谢谢观看,欢迎讨论,请多指教??