断点调试
最近其实很忙,但是发现Android studio在调试的时候还是有很多以前不知道的技巧,整理下资料总结分享下。
当前使用的版本是2.3.3,还没有去研究3.0 版本:
调试界面介绍
当我们在debug模式时候,调试界面会自己弹出来
[图片上传失败...(image-6c50d5-1511521215367)]
android studio大体为我们提供了7个功能区:
单步调试区
断点管理区
求值表达式
线程帧栈区
对象变量区
变量观察区
单步调试:
Step Over F8
[图片上传失败...(image-331daa-1511521215367)]
单步跳过,点击该按钮将导致程序向下执行一行。如果当前行是一个方法调用,此行调用的方法被执行完毕后再到下一行。
Step Into F7
[图片上传失败...(image-ce0615-1511521215367)]
单步跳入,执行该操作将导致程序向下执行一行。如果该行有自定义的方法,则进入该方法内部继续执行,需要注意如果是类库中的方法,则不会进入方法内部。
Force Step Into Alt +Shift +F7 强制跳入
[图片上传失败...(image-50a4ab-1511521215367)]
强制单步跳入,和step into功能类似,主要区别在于:如果当前行有任何方法,则不管该方法是我们自行定义还是类库提供的,都能跳入到方法内部继续执行
Drop Frame
[图片上传失败...(image-358fd1-1511521215367)]
没有好记的名字,大意理解为中断执行,并返回到方法执行的初始点,在这个过程中该方法对应的栈帧会从栈中移除.换言之,如果该方法是被调用的,则返回到当前方法被调用处,并且所有上下文变量的值也恢复到该方法未执行时的状态
public class DebugDemo {
private String name = "default";
public void alertName() {
System.out.println(name);
debug();
}
public void debug() {
this.name = "debug";
}
public static void main(String[] args) {
new DebugDemo().alertName();
}
}
当你在调试debug()时,执行该操作,将回调到debug()被调用的地方,也就是alertName()方法。如果此时再继续执行drop frame,将回调到alertName()被调用的地方,也就是main().
Force Run to Cursor
[图片上传失败...(image-19b344-1511521215367)]
Alt +F9 可以忽视已经存在的断点,跳转到光标所在处.举个简单例子说明下:
比如现在第10行,此时我想调试18行而又不想一步一步调试,能不能一次到位呢?我们只需要将光标定位到相应的位置,
执行Evaluate Expression,就相当于在调试行之前嵌入了一个交互式解释器,那么在该解释器中我们能做什么呢?在这里,我们可以对result进行求值操作:对着你想要求值得位置点击鼠标右键,选择evaluate Expression.此时会显示如下:
[图片上传失败...(image-b034f3-1511521215367)]
Return
[图片上传失败...(image-6f2c7b-1511521215367)]
点击该按钮会停止目前的应用,并且重新启动.换言之,就是你想要重新调试时,可以使用该操作,嗯,就是重新来过的意思.
Pause Program
[图片上传失败...(image-22cda2-1511521215367)]
点击该按钮将暂停应用的执行.如果想要恢复则可以使用下面提到的Resume Program.
Resume Program
[图片上传失败...(image-e472f4-1511521215367)]
F9执行下一个断点在很多情况下,我们会设置多个断点以便调试。在某些情况下,我们需要从当前断点移动到下一个断点处,两个断点之间的代码自动被执行,这样我们就不需要一步一步调试到下一个断点了,省时又省力
Stop
[图片上传失败...(image-20cd14-1511521215367)]
点击该按钮会通过相关的关闭脚本来终止当前进程.换言之,对不同类型的工程可能有不同的停止行为,比如:对普通的Java项目,点击该按钮意味着退出调试模式,但是应用还会执行完成.而在Android项目中,点击该按钮,则意味这app结束运行.
View Breakpoints
[图片上传失败...(image-6b6098-1511521215367)]
点击该按钮会进入断点管理界面,在这里你可以查看所有断点,管理或者配置断点的行为,如:删除,修改属性信息等:
Mute Breakpoints
[图片上传失败...(image-77447f-1511521215367)]
使用该按钮来切换断点的状态:启动或者禁用.在调试过程中,你可以禁用暂时禁用所有的断点,已实现应用正常的运行.该功能非常有用,比如当你在调试过程中,突然不想让断点干扰你所关心的流程时,可以临时禁用断点.
Show Method Return Values
调试过程中启用该功能,将在变量区显示最后执行方法的返回值.举个例子来说,首先,关闭该功能,我们调试这段代码并观察其变量区:
[图片上传失败...(image-16c0dd-1511521215367)]
这里写图片描述
开启该功能之后,再来观察变量区的变化:
[图片上传失败...(image-b20cba-1511521215367)]
这里写图片描述
继续往下调试:
[图片上传失败...(image-2eb5c9-1511521215367)]
这里写图片描述
继续往下调试:
[图片上传失败...(image-3697ad-1511521215367)]
调试的两种方式
到目前,调试的相关基础我们已经介绍完了,但是不少童鞋对Android Studio中
[图片上传失败...(image-a1ac03-1511521215367)]
Debug:以调试模式安装运行,断点可以在运行之前设置,也可在运行后设置,是多数人最常用的调式方式
Attach process:和Debug方式相比,能够将调试器attach到任何正在运行的进程。比如,我们可以通过attach process到想要调试的进程。然后,在需要的地方设置相关断点即可。