1.4 调试项目

Android Studio自带的调试程序让用户能够对运行在模拟器或者真机设备的应用进行调试。

1.4.1 Debug断点调试

Debug断点调试是每个开发工具必备的功能,当然Android Studio也有,使用Debug断点调试可以查看运行中变量的值与表达式的值,可以一行一行代码逐步进行调试。

如果你的程序是逻辑问题(程序本身不报错,但是结果错误),用Debug调试进行问题定位非常方便。

1. 设置断点

找到想断点的代码行位置,点击该代码左侧空白处,或者将光标停留在这行代码上,然后按组合键Ctrl+F8(在Mac上,按Command+F8),如图1-42所示。

图1-42 添加断点

例如,想追踪MainActivity中变量a的值,就可以在声明a变量那一行设置一个断点。可以看到左侧空白处有一个酒红色的原点。

2. 调试

给需要调试的代码设置断点之后,点击Android Studio工具栏上的Debug App按钮运行项目。点击这个按钮之后就会以Debug模式运行App。

当软件运行到“int a=10;”这一行代码时,Android Studio会暂停应用的运行,并且Android Studio会显示Debugger标签,如图1-43所示。

图1-43 Debug中

我们可以使用Debugger标签中的工具来确定应用的状态:

• 要检查变量的对象树,在Variables视图中将其展开。

• 要在当前执行点对某个表达式求值,点击Evaluate Expression 按钮。

• 要前进到下一行代码(而不进入方法),点击Step Over 按钮。

• 要前进到方法调用内的第一行,点击Step Into 按钮。

• 要前进到当前方法之外的下一行,点击Step Out 按钮。

• 要让应用继续正常运行,点击Resume Program 按钮。

例如,想看到“a+=20;”这行代码运行后的结果,可以点击Step Over按钮,然后可以在Variables视图中看到a的值等于30,如图1-44所示。

图1-44 显示代码的运行结果

如果这个断点调试完成,让应用继续正常运行,点击Resume Program按钮。

1.4.2 日志调试

1. 写入日志

要在代码中写入日志,使用Log类,日志消息可以帮助了解执行流程。android.util.Log常用的方法有以下5个:

• Log.v():对应verbose,调试颜色为黑色的,任何消息都会输出。

• Log.d():对应debug,仅输出debug调试的意思,但它会输出上层的信息。

• Log.i():对应info,一般提示性的消息。

• Log.w():对应warn,输出为蓝色,可以看作warning(警告),一般需要注意优化Android代码。

• Log.e():对应error(异常),输出为红色,红色错误需要认真解决。

这5个方法都有两个参数,第一个参数是tag(为Log打上标签),第二个参数是打印内容。

2. 查看日志

首先在MainActivity的onCreate中加入打印5种日志的代码。

    Log.v("ansen","verbose");
    Log.d("ansen","debug");
    Log.i("ansen","info");
    Log.w("ansen","warn");
    Log.e("ansen","error");

重新运行程序,然后在Android Monitor标签的logcat中看到输出的日志,效果如图1-45所示。

图1-45 查看log

① 选择设备。

② 选择运行的程序包名。

③ 选择要显示的日志级别,对应Log打印日志的5种方法。

④ 根据字符串过滤日志,例如这里是根据ansen过滤,日志的tag或内容必须要包含ansen这个字符串才会显示出来。

⑤ 在过滤之后的日志中进行字符串查找。

我们在MainActivity的oncreate方法中最后一行用到了java sdk里面的System类来打印,这样也是可以的,但是不推荐使用。System类打印日志没有tag标签,没有日志级别,当日志过多时过滤不方便。