Android Studio Debug调试详解

日??⒅?,我们难免会遇到BUG,如何快速的定位问题,发现问题尤为重要,这直接关系到我们开发的效率;所以我们必须要快速准确的定位问题,提高开发效率,并提升自己的代码质量;接下来我们就来说一下Android Studio中的Debug调试基础和技巧,学会这些可以帮助我们高效精准的定位问题,发现问题,并解决问题;

一般来说我们有两种办法调试一个debuggable的apk;其一是下好断点,然后用debug模式编译安装这个app;其二是 attach process,在Android Studio里面就是这么一个对话框:

Paste_Image.png

第二种方法比较常用,我们可以在启动apk之后,直接下断点,然后attach process到制定进程,条件触发之后就可以直接进入调试模式。(本篇所有示例均是在第二种方式下进行的 attach process)

我们来看一下进入debug模式后的界面:

Paste_Image.png

android studio大体为我们提供了6个功能区:
1、单步调试区
2、断点管理区
3、求值表达式
4、线程帧栈区
5、对象变量区
6、变量观察区
下面我们分别对这6个区域进行介绍

一、单步调试区

Paste_Image.png

该区提供了调试的主要操作,主要有:Step over、step into、force step into、step out、drop frame。

1、Show Execution Point

Paste_Image.png

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

2、Stem Over

Paste_Image.png

单步跳过,点击该按钮将导致程序向下执行一行。如果当前行是一个方法调用,此行调用的方法被执行完毕后再到下一行。(注意不会进入方法内部)

3、Step Into

Paste_Image.png

单步跳入,执行该操作将导致程序向下执行一行。如果该行有自定义的方法,则进入该方法内部继续执行,需要注意如果是类库中的方法,则不会进入方法内部。

4、Force Step Into

Paste_Image.png

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

5、Drop Frame

Paste_Image.png

中断执行,并返回到方法执行的初始点,在这个过程中该方法对应的栈帧会从栈中移除.换言之,如果该方法是被调用的,则返回到当前方法被调用处,并且所有上下文变量的值也恢复到该方法未执行时的状态。

6、Force Run to Cursor

Paste_Image.png

很好用的一个功能,可以忽略所有的断点,跳转到当前光标所在的位置调试;假如我们现在在第8行有断点,第10行有断点,目前程序停留在第8行断点上,我们将光标定位到第9行,单击该按钮,程序将跑到第9行;

7、Evaluate expression

Paste_Image.png

点击该按钮会在当前调试的语句处嵌入一个交互式解释器,在该解释器中,你可以执行任何你想要执行的表达式进行求值操作。假如我们当前断点处有一个result的返回值;我们单击该按钮会弹出一个对话框,在该对话框中我们可以对该result进行各种表达式操作;

二、断点管理区

Paste_Image.png

1、Return

Paste_Image.png

点击该按钮会停止目前的应用,并且重新启动.换言之,就是你想要重新调试时,可以使用该操作,嗯,就是重新来过的意思.

2、Resume Program

Paste_Image.png

跳转到下一个断点处,可以理解为下一个断点;如果没有断点,则运行结束;

3、Stop

Paste_Image.png

停止调试;结束运行;

4、View BreakPoints

Paste_Image.png

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

5、Mute BreakPoints

Paste_Image.png

该按钮用来禁用/启动所有断点,假如我们在某个断点处得到了我们想要的结果,并不想看其他后续断点可以点击该按钮禁用所有断点,然后程序会正常执行结束;

三、变量观察区

Paste_Image.png

我们在调试的时候,希望看某个变量的值,所以我们只需要简单设置一下就可以在变量观察区看到该变量的值,如下所示


Paste_Image.png

这里有一个技巧,如果我们在调试过程中,突然想要看看这个变量换一个值后的运行结果;可以在调试的过程中修改该变量的值,具体操作如下:


Paste_Image.png

如上图所示,右击变量num2选择set value可以弹出对话框重新设置num2的值,如下所示
Paste_Image.png

可以看出num2的值原先为10,我们修改为50,回车即可生效;
Paste_Image.png

运行结果发生变化;

上面已经介绍了单点调试、变量管理和变量观察三个区域,接下来我们根据断点的分类来介绍其他区域;

断点的分类

断点是调试器的功能之一,可以让程序暂停在需要的地方,帮助我们进行分析程序的运行过程。
在Android Studio中,断点又被以下五类:
条件断点
日志断点
异常断点
方法断点
属性断点

1、条件断点

所谓的条件断点就是在特定条件发生的断点,也就是,我们可将某个断点设置为只对某种事件感兴趣,最典型的应用就是在列表循环中,我们希望在某特定的元素出现时暂停程序运行。假如我们有一个数组里面有1、2、3、4、5五个值,我们想在值等于3的时候停下来,可以设置条件断点;


Paste_Image.png

右击断点,在弹出的对话框中设置相应的条件即可,我们运行一下看下效果


Paste_Image.png

可以看到在num==3的时候,程序停了下来;

2、日志断点

很多时候我们调试的时候更多的是打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以经常做的事情就是在代码里面添加日志信息,输出函数参数,返回信息,输出我们感兴趣的变量信息等。但是这样做的问题在于我们需要重新编译运行程序,并且添加了很多无谓的代码且不好管理,这个时候我们可以使用日志断点;该类型的断点不会使程序停下来,而是在输出我们要它输出的日志信息,然后继续执行。
举例说明:


Paste_Image.png

同样是右击断点,在上图的对话框中进行设置我们来看一下运行效果:


Paste_Image.png

是不是比你在代码中添加输出语句方便多了。

3、异常断点

在有些情况下,我们只对某些特定的异常感兴趣,或者我们只对异常感兴趣;我们希望只要程序发生异常程序就能断下来;这好像保存现场一样,这样就会留下的线索比较多,可以使我们快速的找到问题得根源;

举例说明,首先我们添加一个异常断点,单击
然后在弹出的对话框中进行如下设置
Paste_Image.png

假如我们只关心空指针异常可以进行如下设置


Paste_Image.png

选中空指针异常即可,我们人为设置一个空指针异常来看下运行效果:
Paste_Image.png

图中的bt_ride是一个空值的Button,可以看到,当程序发生空指针异常后会将光标直接定位的发生异常的位置;

4、方法断点

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


Paste_Image.png

5、Field WatchPoint

有没有这样一种场景:你发现某个值莫名其妙滴不知道什么时候被谁给修改了,罪魁祸首是谁?那么我们怎么揪出这个修改我们值的捣蛋鬼呢?那就是这个 Field WatchPoint的功能了;使用它我们可以在某个Field被访问或者修改的时候让程序断下来;完美解决这个问题。我们可以直接在这个变量旁边单击就可以添加Field WatchPoint


Paste_Image.png

我们可以右击从弹出的菜单中设置默认该变量被修改的时候断下来,也可以设置每次访问该值都断下来;
好了,本篇对Android Studio中的debug调试就介绍到这里了,其实debug调试的功能远不止这些,剩下的你们可以自己去发掘,以上的这些,可以发现解决很大一部分bug了@_@

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,172评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,346评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,788评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,299评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,409评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,467评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,476评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,262评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,699评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,994评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,167评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,827评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,499评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,149评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,387评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,028评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,055评论 2 352

推荐阅读更多精彩内容

  • Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现b...
    7d3fadbb4407阅读 555评论 0 3
  • Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现b...
    涅槃1992阅读 50,664评论 36 365
  • Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现b...
    StChris阅读 1,791评论 0 16
  • 从前,有一条河流,自西向东流淌,日夜不息。 河的南边,一里多地儿,有一座山,山上有一座庙,庙里有一个和尚。 河的北...
    斯麦尔阅读 380评论 2 6
  • 事例一:两个小朋友在木头上爬着玩,一只大蜘蛛悄无声息爬过来,俩孩子从没见过这么大的蜘蛛,惊讶之后冲着小虫子开始喊叫...
    燕倚东风一缕寒阅读 302评论 0 1