Android开发 ——Android Studio工具Debug调试技巧

文章摘自两个博客   原文地址 http://blog.csdn.net/qq_23547831/article/details/51868496 

另一个因为对方也是转载但是没加上原文地址  只能默默的感谢一下原作者了!

Android studio的调试技巧:

写代码的过程中不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug;那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?你是否知道求值调试,条件断点,日志断点,方法断点,异常断点等调试技巧么?下面我们将介绍一下Android studio中的调试技巧。

调试基础

一般来说我们有两种办法调试一个debuggable的apk;

  • 设置好断点,然后用debug模式编译安装这个app;

  • 执行attach debugger to Android process,即将debug进程添加到当前进程中。

一般比较常使用的debug方式是attach debugger to Android process:

这里写图片描述

在执行按钮右侧两个的带有小虫子的按钮其实就是Attach Debugger to Android process按钮。

我们可以在启动apk之后,直接下断点,然后attach process到指定进程,条件触发之后就可以直接进入调试模式。

断点调试

断点调试是最基本操作,基恩的断点调试有以下的几个常用的调试命令:

  • F5跳转内部执行

  • F6跳转下一步

  • F8跳转到下一个断点

如何添加断点?

直接在Android studio中的Java源代码左侧,想调试某一行代码的话,直接单击若左侧出现了一个小红圈,则说明断点已经添加好了: 
这里写图片描述

当代码处于debug模式,并且执行到此处的时候就会卡住在这里。

执行断点调试

执行attach debugger to Android process,当代码执行到含有断点的时候就可以将程序卡到断点的代码了: 
这里写图片描述

这时候我们可以看到在该行代码中可以看到相应的局部变量值,执行F6走到下一步,执行F8,调试到下一个断点。

添加观察变量 
在调试模式下,选择变量,并右击: 
这里写图片描述

这时候选择Add to watches,就可以将变量添加到观察列表了。

表达式调试:Evaluate Expression

这个调试功能非常的实用,也是我最喜欢的功能,使用ctrl + u快捷键可以弹窗表达式调试弹窗: 
这里写图片描述

这个功能非常实用,可以在断点处直接进入一个求值环境,在这里你可以执行任何你感兴趣的表达式可以在表达式调试弹窗中写任何java表达式,比如: 
这里写图片描述

其他的比如在断点处有一个对象object,如果你要查看它的某个属性很简单,在Debug窗口就能看到,但是如果你想要执行它的某个方法看看结果是什么呢?借助这个可以实现。当然它的功能远不止这么多,相当于直接进入了一个 REPL环境,非常实用。

条件断点

假设你的断点在一个列表的循环里面,可是你只对这个列表的某一个元素感兴趣,只想在遇到这个元素的时候才断下来;你是一直人肉 F9 直到满足条件吗?条件断点就是满足这种需求的,顾名思义,在特定条件下的断点。使用起来也非常简单,在你的断点上鼠标右键会出现一个小窗口,写上条件即可。 
这里写图片描述

其他断点调试方式

除了这里的求值断点,条件断点,还有日志断点,异常断点,方法断点等,具体的可自行google哈。

总结:

  • Android默认提供了Log API实现对日志的打印功能;

  • 可以实现自定义日志框架,定制化显示日志样式,定制化配置是否显示日志等,可参考:Android日志框架

  • 可以通过配置gradle,让测试环境中显示日志信息,在正式环境中不显示日志信息;

  • Android studio提供了断点调试功能,包含了求值调试,条件断点,日志断点,方法断点,异常断点等等;

另一片文章:

0前言

Android Studio目前已经成为开发Android的主要工具,作为开发者,调试、发现并解决BUG是家常便饭。正所谓,工欲善其事必先利其器,今天我们就来看看Android Studio中的调试技巧

1调试面板

首先,来看看Android studio中为我们提供的调试面板(标准情况下):这里写图片描述

点击右上角Restore ‘Threads’View可先展示目前相关的线程信息

这里写图片描述

2单步调试区

2.1 Show Execution Point这里写图片描述

点击该按钮,光标将定位到当前正在调试的位置

2.2 Force Step Into这里写图片描述

强制单步跳入,和step into功能类似。
主要区别在于:如果当前行有任何方法,不管该方法是我们自行定义还是类库提供的,都能跳入到方法内部继续执行

2.3 Drop Frame这里写图片描述

中断执行,并返回到方法被调用处,在这个过程中该方法对应的栈帧会从栈中移除。并且所有上下文变量的值也恢复到该方法未执行时的状态。

2.4 Force Run to Cursor 这里写图片描述

非常好用的一个功能,可以忽视已经存在的断点,跳转到光标所在处。

3.求值表达式

Evaluate expression 这里写图片描述

点击该按钮会在当前调试的语句处嵌入一个交互式解释器,在该解释器中,你可以执行任何你想要执行的表达式进行求值操作

比如,我们在调试时执行到以下代码: 

这里写图片描述

此时执行EvaluateExpression,在该解释器中我们能做什么呢?在这里,我们可以对result进行求值操作:右键要求值,选择evaluate Expression。此时会显示如下:

这里写图片描述

在弹出的输入框中输入求值表达式,比如这里我们输入Math.min(result,50),如下图:

这里写图片描述

点击执行,我们发现在Result中已经输出了结果,如下:

这里写图片描述

3.断点管理区

3.1 Return 这里写图片描述

点击该按钮会停止目前的应用,并且重新启动。用于想重新调试时。

3.2 Pause Program 这里写图片描述

点击该按钮将暂停应用的执行,如果想要恢复则可以使用下面提到的Resume Program。

3.3 Resume Program这里写图片描述

该操作有恢复应用的含义,但是却有两种行为:
1. 在应用处在暂停状态下,点击该按钮将恢复应用运行
2. 在很多情况下,我们会设置多个断点以便调试。在某些情况下,我们需要从当前断点移动到下一个断点两个断点之间的代码自动被执行,这样我们就不需要一步一步调试到下一个断点了,省时又省力。

3.4 Stop这里写图片描述

(1)对普通的Java项目,点击该按钮意味着退出调试模式,但是应用还会执行完成;

(2)而在Android项目中,点击该按钮,则意味这APP结束运行。

3.5 View Breakpoints这里写图片描述

点击该按钮会进入断点管理界面,在这里你可以查看所有断点,管理或者配置断点的行为,如删除,修改属性信息等:

这里写图片描述

3.6 Mute Breakpoints 这里写图片描述

使用该按钮来切换断点的状态:启动或者禁用

在调试过程中,你可以暂时禁用所有的断点,以实现应用正常的运行。该功能非常有用,比如当你在调试过程中,突然不想让断点干扰你所关心的流程时,可以临时禁用断点。

3.7 Get thread dump这里写图片描述

获取线程Dump,点击该按钮将进入线程Dump界面

这里写图片描述

线程工具区中最常用的是这里写图片描述,可以用来过滤线程,其他的不做解释了。

接下来我们来认识一下线程的类型,表示为不同的图标:

 

线程状态描述图标
Thread is suspended.这里写图片描述
Thread is waiting on a monitor lock.这里写图片描述
Thread is running.这里写图片描述
Thread is executing network operation, and is waiting for data to be passed.这里写图片描述
Thread is idle.这里写图片描述
Event Dispatch Thread that is busy.这里写图片描述
Thread is executing disk operation.

这里写图片描述

3.8 Settings这里写图片描述

点击该按钮将打开有关设置的列表:

这里写图片描述

3.8.1 Show Values lnline

调试过程中开启该功能,将会在代码右边显示变量值,即下图中红框所示部分:

这里写图片描述

3.8.2 Show MethodReturn Values

调试过程中启用该功能,将在变量区显示最后执行方法的返回值

举个例子来说,首先,关闭该功能,我们调试这段代码并观察其变量区:

这里写图片描述

开启该功能之后,再来观察变量区的变化:

这里写图片描述

继续往下调试:

这里写图片描述

这个功能简直是棒极了!在调试一段代码,并想看该代码中最后调用方法的最终结果时就非常有用了。

3.8.3 Auto-VariablesMode

开启这个功能后,idea的Debugger会自动评估某些变量,大概就是当你执行在某个断点时,Debugger会检测当前调试点之前或者之后的变量的状态,然后在变量区选择性输出。

举个例子来说明,未开启该功能之前,变量区输出所有的变量信息:

这里写图片描述

开启之后,当你调试到第13行时,Debugger检测到num变量在之后没有被使用,那么在变量区就不会输出该变量的信息。

这里写图片描述

3.8.4 Sort valuesalphabetically

开启这个功能后,变量区中的输出内容会按照按字母顺序进行排序,不常用,还是按照默认的顺序好。

3.9 Help这里写图片描述

这个不用说了,有任何不明白的都可以查看官方帮助文档。

其他几个操作:Settings、Pin、Close留给各位自己去使用。

4.修改变量值

在调试过程中,我们可以方便的修改某个变量的值,如下:

这里写图片描述 

在上图中,当前result的值经过计算为10,这里我们通过Set Value将其计算结果修改为100。

5.变量观察区

该区域将显示你所感兴趣的变量的值。

在调试模式下,你可以通过Add to Watches将某个变量添加到观察区,操作如下:

这里写图片描述

这里我们对name比较感兴趣,希望看到它的值的变化情况,因此我们将其“特殊关照”。

需要注意,此时因为name是成员变量,因此在对象观察区也可看到该值。如果是局部变量,无疑只能用这种方式了。

6.断点

6.1 条件断点

所谓条件断点就是在特定条件发生的断点,也就是,我们可将某个断点设置为只对某种事件感兴趣,最典型的应用就是在列表循环中,我们希望在某特定的元素出现时暂停程序运行。比如,现在我们有个list中,其中包含了q,1q,2q,3q四个元素,我们希望在遍历到2q时暂停程序运行,那么需要进行如下操作: 

在需要的地方添加断点,如下:

这里写图片描述

断点处左键单击,在Condition处填写过滤条件.此处我们只关心2q,因此填写s.equals("2q")

这里写图片描述

6.2 日志断点

该类型的断点不会使程序停下来,而是在输出我们要它输出的日志信息,然后继续执行

具体操作如下: 同样在断点处左键单击,在弹出的对话框中取消选中Suspend。

这里写图片描述

在弹出的控制面板中,选中Log evaluated expression,然后再填写想要输出的日志信息,如下:

这里写图片描述

当调试过程遇到该断点将会输出结果,如下:

这里写图片描述

6.3 异常断点

所谓的异常断点就是在调试过程中,一旦发生异常,则会立刻定位到异常抛出的地方

比如在调试异常中,我们非常关注运行时异常,希望在产生任何运行异常时及时定位,那么此时就可以利用该类型异常,在上线之前,进行异常断点调试非常有利于减少正式环境中发生crash的几率。

具体操作如下:Run菜单项中,选择ViewBreakpoints,如下:

这里写图片描述

在管理断点面板中,点击+

这里写图片描述

在弹出的下拉选择列表中,我们选择Java ExceptionBreakpoints。

这里写图片描述

这里我们选中Search By Name,在下面的输入框中输入我们所关心的异常类型。

此处我们关心NullPointerException,在调试过程一旦发生NullPointerException,调试器就会定位到异常发生处。

这里写图片描述

6.4 方法断点这里写图片描述

传统的调试方式是以行为单位的,所谓单步调试;但是很多时候我们关心的是某个函数的参数,返回值;(回想一下我们使用日志的时候打印的最多的信息难道不是函数的参数和返回值吗?)使用方法断点,我们可以在函数级别进行调试;如果经常跳进跳出函数或者只对某个函数的参数感兴趣,这种类型的断点非常实用。具体使用方法有两种方式;最简单的是在你感兴趣的方法头那一行打上断点。

6.5 Field WatchPoint 这里写图片描述

Filed WatchPoint是本质上是一种特殊的断点,也称为属性断点:当我们某个字段值被修改的时候,程序暂停在修改处。通常在调试多线程时尤为可用,能帮我们及时的定位并发错误的问题。其使用和添加普通的断点并无不同,断点图标稍有不同。

7.调试的两种方式

这里写图片描述

到目前,调试的相关基础我们已经介绍完了,但是不少同学对Android Studio中这两个按钮感到困惑:Debug和Attach process。 
这里我们就简单介绍一下这两者的区别:

Debug:以调试模式安装运行,断点可以在运行之前设置,也可在运行后设置,是多数人最常用的调式方式

Attach process:和Debug方式相比,能够将调试器attach到任何正在运行的进程。比如,我们可以通过attach process到想要调试的进程。然后,在需要的地方设置相关断点即可

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芝麻粒儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值