Android Studio 调试

编写代码很多时候都会“差强人意”,很难一次获得想要的结果,出现错误的时候需要查找错误的原因,这种查找的过程可以称为“程序调试”。一般来讲程序员百分之十的时间写代码,百分之九十的时间都在调试,因此要认识到调试的重要性。调试的方式有多种,这里介绍最常用的两种:Logcat调试方式和断点调试方式。

2.3.1 Logcat调试

Logcat调试方式很简单,在可能出现错误的地方将变量的值打印出来,方便分析总结错误原因。这里编写一个简单的Java程序,如下:

private int calculateMultiply(int i) {
    return i * i;
}

int[] testInts = new int[10];

public void test(View view) {
    int i = 0;
    while (i <10) {
        i++;
        int i2 = calculateMultiply(i);
        testInts[i-1] = i2;
        Log.d(TAG, "onCreate: " +testInts[i-1]);
    }
}

使用while循环不断计算i*i的值并通过Log打印出来,这时查看Logcat窗口中的Log信息如图2.60所示。


图2.60 Logcat窗口中的Log信息

这里通过TAG(MainActivity)来过滤日志信息,可以看出所有的i*i都被打印出来了,根据打印的值即可初步判断是否发生错误。

2.3.2 断点调试

断点调试相对于Logcat调试要复杂一些,较Logcat显示运行后的结果,断点调试可以暂停程序的运行而获得运行中的结果。调试可以分成几个步骤,下面一一介绍。

1. 添加断点

在想要调试的代码行的左边栏左键点击一下即可添加一个断点,如图2.61所示。



图2.61 添加断点

在i++处添加了一个断点,下面就可以点击工具栏中的调试按钮开始调试。

2. 开始调试

点击工具栏中的调试按钮,如图2.62所示。


图2.62 调试按钮

此时进入调试准备阶段,查看底部的监视窗,如图2.63所示。


图2.63 调试监视窗一

图2.61中的test方法是按钮的单击事件监听,因此单击模拟器中的按钮触发进入调试阶段,如图2.64所示。



图2.64 调试监视窗二

可以看出,此时由Console切换到了Debugger标签,我们可以根据窗口内的工具栏按钮或快捷键来控制程序的运行。常用的调试方式有三种(Step Over、Step Into、Step Out),下面一一介绍。

Step Over,可以控制程序向下运行一步,两种方式进行操作,一种点击工具栏中的按钮如图2.65所示。


图2.65 Step Over键

当然也可以使用快捷键F8来控制,这时查看代码编辑区,如图2.66所示。



图2.66 代码调试下一步

可以看出,此时代码已由断点处向下运行了一行(蓝色背景行)。

Step Into,这个操作可以进入到调试中遇到的方法体中,例如上面的操作中遇到了calculateMultiply方法,想要进入到这个方法体中就可以单击工具栏中的Step Into按钮,如图2.67所示。


图2.67 Step Into键

同样也可以使用快捷键F7进行操作,再次查看代码编辑区如图2.68所示。



图2.68 代码调试进入方法中

可以看出,此时代码调试运行到方法calculateMultiply中了,在程序的右边显示出了这时方法的参数i的值。

若上面的步骤中进入了一个比较繁复的方法,而我们没有耐心一步步执行到最后,这时就可以使用Step Out跳出来,如图2.69所示。


图2.69 Step Out键

同样可以使用Shift+F8快捷键进行操作,再次查看代码编辑区,如图2.70所示。


图2.70 代码调试-跳出方法

这时又跳脱到了刚才进入方法的地方,这时再按F8快捷键又可以向下运行了。

2.3.3 高级调试

1. 变量值设置

对于有些For循环或While循环,一步步执行可能需要耗费很多时间,例如上面的While循环,我们想查看一下i为9时的值,若一步步执行就需要执行9遍,会比较抓狂,有没有比较好的方式呢?当然,我们可以设置变量的值,在监视面板中选择要改变数值的变量,点击右键如图2.71所示。


图2.71 代码调试-变量值设置一

在弹出菜单中选择Set Value...,输入数值,如图2.72所示。


图2.72 代码调试-变量值设置二

按Enter键即可设置成功,这时再次到代码中查看,如图2.73所示。



图2.73 代码调试-变量值设置三

可以看出,此时i变量的值已经变成了9。

2. 断点跳转

一般来讲,一次调试过程可能涉及多个断点,这时就可能需要断点间跳转的功能,例如图2.74中的程序中添加了两个断点。


图2.74 代码调试-断点跳转一

假设运行到第一个断点查看变量值之后,想迅速跳转到第二个断点,这时就可以点击调试框中的Run to Cursor按钮快速跳转,如图2.75所示。


图2.75 代码调试-断点跳转二

当然也可以通过快捷键Alt+F9来实现,如图2.76所示。


图2.76 代码调试-断点跳转三

可以看出,直接跳转到了第二个断点。

3. 表达式/方法值计算

若调试的代码中有一些表达式或方法值需要计算,就需要用到Evaluate Expression...功能,选中需要计算的表达式或方法,点击右键,在弹出右键中选择Evaluate Expression...如图2.77所示。


图2.77 代码调试-计算表达式值一

在弹出框内点击Evaluate按钮即可计算表达式的值,如图2.78所示。


图2.78 代码调试-计算表达式值二

在Result栏中显示出计算值。

4. 查看所有断点

点击调试监视框左边栏的View Breakpoints即可查看所有断点,如图2.79所示。


图2.79 代码调试-查看所有断点

当然也可以使用快捷键Ctrl+Shift+F8来打开,此外,还有一个可以查看所有断点的入口,工具栏Run->View Breakpoints,打开查看界面如图2.80所示。


图2.80 代码调试-查看所有断点界面

这时在左边栏中就可以看到所有的断点,在右下角还可以看到断点在代码中的位置,点击左上角的 “+” 和 “-” 可以添加或删除断点。

5. 停止调试

不想继续调试时,记住点击左边栏的Stop按钮来停止调试,如图2.81所示。


图2.81 代码调试-停止调试

停止后的监视窗如图2.82所示。


图2.82 代码调试-停止调试后视图


如果你喜欢作者的文章,还可以购买他的书(京东自营):


发布了498 篇原创文章 · 获赞 115 · 访问量 126万+

猜你喜欢

转载自blog.csdn.net/yayun0516/article/details/77872013