Android Studio 调试完全掌控

本文介绍使用Android Studio开发应用程序时进行断点调试相关的知识。干货满满,适合初学者学习。

1. 调试模式

想要进行断点调试,首先要进入调试模式。

1.1 开发者模式

首先要做手机上开启开发者模式,然后在开发者模式中打开“USB调试”开关,有些设备上还要开启“USB安装”、“USB调试”等开关,这要看具体的手机设备系统。


图1-1开发者选项

此时使用电脑连接手机时,会弹出USB调试授权弹框,点击确定即可。


图1-2 授权弹框

关于如何打开“开发者模式”,不同的手机有不同的方式,可以在网上搜索。

1.1 连接已运行的进程

当设备连接到电脑后,在Android Studio的工具栏就可以看到已连接的设备了。


图1-3 已连接的设备

点击右侧这个按钮“Attach Debugger to Android Process”,弹出进程选择弹框。


图1-4 调试按钮
图1-5 选择要调试的进程

选择进程并点击确认按钮,即可进入调试模式。

1.2 运行并连接

点击这个“Debug ‘app’”按钮,可以安装完应用后立即进入调试模式。


图1-6 运行并连接

1.3 启动时连接

有时我们希望调试已安装应用的启动过程,但是使用“Debug 'app'”按钮会重新编译安装,这样会很慢且覆盖掉现有的应用,此时可以在手机上设定“选择调试应用”,并打开“等待调试器”:


图1-7 等待调试应用

这时在打开“Test”应用(已选择调试的应用),就会弹出等待调试对话框


图1-8 等待连接调试

此时 点击“Attach Debugger to Android Process”即可进入应用调试模式。
图1-9 等待调试应用时,点此按钮进入调整模式

1.4 连接非主进程

一次调试连接过程只能对一个进程进行调试,如果要调试非主进程,需要在选择调试进程界面选择期望的进程。


图1-10 调试多个进程

2. 断点

2.1 断点简介

在代码区左侧点击即可添加断点


图2-1 添加断点

当代码执行到断点处会暂停


图2-2 代码在断点处停止运行

断点状态下,可以在Variables窗口(图中右下侧窗口)查看当前环境下的变量信息,同时也可以修改变量的内容。

点击Evaluate Expression...按钮,弹出表达式计算弹框,在这里可以执行任何语句或查看任何变量的内容。


图2-3 Evaluate Expression...按钮
图2-4 在Evaluate弹框中查看“this”的内容

2.2 条件断点

在断点上点击弹出断点菜单,勾选“Condition”后,可以在下面的框中输入任意条件语句,只有当此处的条件为true的时候才会触发断点。


图2-5 在断点处设置条件

2.3 非中断断点

在图2-5中取消勾选“Suspend”选项,断点就变成了非中断断点。顾名思义,非中断断点并不会中断程序的执行。
勾选“Evaluate and log”并在下面的输入框中输入任意语句,在代码运行到这个位置的时候就会执行该语句。一般情况下可以输出log或者改变某个变量的值。

如果输出log,可以在调试模式的Console窗口中看到输出


图2-6 从Console窗口看到日志输出

2.4 变量&方法断点

可以在变量和方法上添加断点,代码将在变量改变(或访问时,可在断点菜单中设置)和方法调用(进入或退出,可设置)时中断,当然也可以执行指定的语句。


图2-7 在变量和方法上添加断点

值得注意的时,在方法上添加断点会导致程序运行异常缓慢。

2.5 异常断点

点击Debug菜单中的“View Breakpoints...”按钮(如图2-8),弹出断点管理页面。勾选“Java Exception Breakpoints”,应用中任意代码崩溃时都会触发断点。


图2-8 异常断点

在图2-8中还能够看到添加的所有断点并进行管理。

2.5 多线程断点

一个线程只能被一个断点阻塞,所以不存在在多个断点间切换的问题。
如果在不同的线程都打了断点,且都处于阻塞中,那如何切换不同的阻塞线程呢?
在Frames页面点击顶部的下拉框,下拉部分展示了当前的线程信息,其中包含了正在查看的阻塞线程(红色对勾项)和其他正被断点阻塞的线程(红点项),选择其他线程并点击,则可以切换查看阻塞的其他线程。


图2-9 切换不同的阻塞线程

2.6 屏蔽所有断点

点击Mute Breakpoints 按钮可以快速屏蔽所有断点,这避免了删除辛辛苦苦添加的断点。


图2-10 屏蔽所有断点按钮

3. 跟进调试

图3-1 调试界面菜单

上图是调试界面的菜单按钮,下面从左向右依次介绍各按钮的功能。

  1. Show Execution Point 点击该按钮可以快速定位到正在中断的代码位置。
  2. Step Over 这个是单步调试,可在断点处一行一行的执行代码
  3. Step Into 点击这个按钮可以进入到当前行的方法内部
  4. Force Step Into 使用Step Info按钮无法进入到某些jdk方法中,此时可以用这个按钮
  5. Step Out 这个和Step Into 功能相反,会从当前正在执行的方法返回
  6. Drop Frame 丢弃当前帧,这会使断点回到当前方法调用前的位置。需要注意的是,虽然调用栈可以回滚,但是已经影响的变量数据并不会还原。低版本的Android Studio可能不支持这个功能,我所用的4.0.2上这个按钮是灰色的,不支持点击。
  7. Run to Cursor 点击这个按钮会执行到光标所在的行。

以上功能都存在快捷键,或者可以自定义快捷键。熟记并使用快捷键可以有效提高调试效率。除此之外还有其他仅提供快捷键的调试工具,可以通过查看快捷键表去了解。

4. 问题列表

4.1 上文中提到的某些窗口看不到

在Debug窗口的右上方点击这个按钮,即可打开或关不指定的窗口。


图4-1 Debug模式内的窗口管理

4.2 如何调试Release包?

可以参考这篇文章。

4.3 设备问题

在华为设备上,如果断点在生命周期方法上,那么几秒后应用就会崩溃从而无法继续调试。此时可以采用非中断断点,在断点处添加log或修改变量进行调试。

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

推荐阅读更多精彩内容