学了一年的Android,还不会调试?你白学了!

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 学了一年的Android,还不会调试?你白学了!

零、前言

开发Android程序时,不仅要注意程序代码的准确性和合理性,还要处理程序中可能出现的异常。Android SDK为我们提供了Log类来获取程序的日志信息,也提供了LogCat管理器,用来查看程序运行的日志信息及错误日志。本文将详细的讲解如何在android studio中,对Android程序进行调试以及DDMS工具的使用

 

 

一、 使用 Log 类来输出日志信息

Android SDK中提供了Log类来获取程序运行时的日志信息,该类在android.util包中,它继承了java.lang.Object类。Log类提供了一些方法,用来输出日志信息,常用的是以下几个:

方法 解析
Log.i() 输出INFO程序日志信息
Log.e() 输出ERROR错误日志信息
Log.d() 输出DEBUG调试日志信息
Log.v() 输出VERBOSE冗余日志信息
Log.w() 输出WARN警告日志信息

上表中列出的Log类的这些方法都有多种重载形式,下面将介绍经常用到的重载形式:


1.1 Log.i()

Log.i()主要用来输出INFO程序日志信息。程序员经常用到的重载形式语法:

public static int i (String key,String value)

key:String字符串,用来为日志信息指定标签,程序员经常将他命名为该类的名称,加以区分。

value:String字符串,用来表示要输出的字符串信息。

INFO程序日志在DDMS的LogCat面板中,一般使用绿色的文字来表示。


1.2 Log.e()

Log.e()方法主要用来输出ERROR错误日志信息。程序员经常用到的重载形式:

public static int e (String key,String value)

key:String字符串,用来为日志信息指定标签,程序员经常将他命名为出现错误的类名称,加以区分。

value:String字符串,用来表示要输出的字符串信息。

ERROR错误日志在DDMS的LogCat面板中,一般使用红色的文字来表示。


1.3 Log.d()

Log.d()方法主要用来输出DEBUG调试日志信息。程序员经常用到的重载形式:

public static int d (String key,String value)

key:String字符串,用来为日志信息指定标签,程序员经常将他命名为可能出现DEBUG的类名称,加以区分。

value:String字符串,用来表示要输出的字符串信息。

DEBUG调试日志在DDMS的LogCat面板中,一般使用蓝色的文字来表示。


1.4 Log.v()

Log.v()方法主要用来输出VERBOSE冗余日志信息。程序员经常用到的重载形式:

public static int v (String key,String value)

key:String字符串,用来为日志信息指定标签,程序员经常将他命名为可能出现冗余的类名称,加以区分。

value:String字符串,用来表示要输出的字符串信息。

VERBOSE冗余日志在DDMS的LogCat面板中,一般使用黑色的文字来表示。


1.5 Log.w()

Log.w()方法主要用来输出WARN警告日志信息。程序员经常用到的重载形式:

public static int w (String key,String value)

key:String字符串,用来为日志信息指定标签,程序员经常将他命名为可能出现警告的类名称。

value:String字符串,用来表示要输出的字符串信息。

WARN警告日志在DDMS的LogCat面板中,一般使用橘黄色的文字来表示。


我们可以在MainActivity.java中输入以下代码

1. public class MainActivity extends AppCompatActivity {
2. 
3. @Override
4. protected void onCreate(Bundle savedInstanceState) {
5. super.onCreate(savedInstanceState);
6.         setContentView(R.layout.activity_main);
7. 
8.         Log.e("zwz01","错误信息");
9.         Log.w("zwz02","警告信息");
10.         Log.i("zwz03","普通信息");
11.         Log.d("zwz04","调试信息");
12.         Log.v("zwz05","冗余信息");
13. 
14.     }
15. }

打开DDMS工具,单机LogCat日志面板,可以在面板内看到如下信息。

 

二、 Android程序调试

 

在程序开发过程中,程序员会不断体会到程序调试的重要性。为了验证Android的运行状况是否和自己想的一样,程序员一般都会在某个方法调用开始和结束的位置,依次使用Log.i()方法输出一定的信息,并根据这些输出信息来判断程序的执行状况。当然这是一种非常过时的程序调试方法,而且会经常造成程序代码混乱,下面来介绍使用Android studio自带的调试工具来调试Android应用程序的方法。


2.1 加断点

下面将详细讲解使用 Android Studio 内置的Android调试器调试Android程序的方法,使用该调试器可以设置程序的断点、实现程序的但不执行、在调试过程中查看变量和表达式的值等调试操作,这样可以避免上述所说的使用Log.i()方法输出调试信息。

使用 Android Studio 的Android调试器需要先设置程序断点,然后使用单步调试分别执行程序代码的每一行。

设置断点是程序调试中必不可少的有效手段,和java代码在eclipse中调试一样,Android调试器在每次遇到程序断点的时候,都会将当前线程挂起,也就是说暂停当前程序的运行。在 Android Studio中,可以在Android编辑器中单击显示代码行号的位置,就可以添加或者删除当前行的断点,如下图所示:

 

2.2 简单调试

为程序设置断点后,单击工具栏的Debug按钮,或者右击代码区域,选择Debug MainActivity.java,将在Android Studio 的底部显示调试面板,查看到当前相关变量的值,如下图所示:

 

 

在调试面板中,可以通过工具栏上的按钮执行相应的调试操作,比如单步跳过、单步跳入等等。常用的调试操作如下:

2.3 单步跳过

 

在工具栏中单击 单步跳过,或者按下F8,将执行单步跳过操作,即运行单独的一行程序代码,但是不进入调用方法的内部,然后跳到下一个可执行点。

如果运行a + b程序,代码如下:

1. public class MainActivity extends AppCompatActivity {
2. 
3. public static int add (int x,int y){
4. return x + y;
5.     }
6. 
7. @Override
8. protected void onCreate(Bundle savedInstanceState) {
9. super.onCreate(savedInstanceState);
10.         setContentView(R.layout.activity_main);
11. 
12. int a = add(1,2);
13. 
14. int b = add(-1,-2);
15.     }
16. }

在int a = add(1,2);处加上断点

 

然后按下F8,我们可以看到,程序直接运行到第20行,而没有进入add()方法。

 

 

如果不断地执行单步跳过操作,会每次执行一行的程序代码,直到程序结束或者等待用户操作(如输入)。

 

2.4 单步跳入

在工具栏点击 单步跳入 , 或者按下F7键,就会跳入到调用方法或对象内部单步执行程序

还是刚刚的 a + b 的例子,在第18行断点处,按下F7,则会进入到add()方法的内部。

 

2.5 跳到下一断点

在工具栏中单击 跳到下一断点 按钮,或者按下F9,会继续向下执行,直到下一个断点的位置。如果程序中没有断点或者抛出了异常,将直接运行到程序结束。

 

2.6 停止调试

在工具栏中单击停止按钮,即红色的正方形:,会停止程序的调试。需要注意的是,该操作不回停止程序的运行,而是会跳过所有的调试。

 


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
存储 Java Linux
Android Mstar增加IR 自定义遥控头码完整调试过程
Android Mstar增加IR 自定义遥控头码完整调试过程
129 1
|
3月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
85 0
|
3月前
|
Ubuntu Android开发
安卓系统调试与优化:(一)bootchart 的配置和使用
本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。
186 0
安卓系统调试与优化:(一)bootchart 的配置和使用
|
5月前
|
安全 API Android开发
Android打开USB调试命令
【6月更文挑战第20天】
186 1
|
6月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
6月前
|
Android开发 内存技术
Android 通过tinyalsa调试解决录制和播放音频问题
Android 通过tinyalsa调试解决录制和播放音频问题
211 1
|
6月前
|
安全 编译器 API
Android HAL深入探索(5): 调试HAL报错与解决方案
Android HAL深入探索(5): 调试HAL报错与解决方案
1168 1
|
6月前
|
网络协议 Shell Android开发
Android 深入学习ADB调试原理(1)
Android 深入学习ADB调试原理(1)
255 1
|
6月前
|
安全 Java Shell
Android13 adb input 调试命令使用和源码解析
Android13 adb input 调试命令使用和源码解析
766 0
|
6月前
|
算法 架构师 程序员
android开发板调试,Android程序员的春天
android开发板调试,Android程序员的春天