AndroidStudio调试之旅

​ 在平常开发中难免会写出一些bug,明显的bug通过分析代码可以找出来问题所在,但也会有一些隐藏很深的bug,单凭肉眼分析代码很难定位,这个时候就需要编译器协助,AndroidStudio就提供了非常强大的调试功能,帮助我们能快速定位解决bug,告别加班!!!

开启调试模式

​ 首先了解下开启调试的方法,在AndroidStudio中开启调试模式有两种方法,即普通Debug和Attach debugger to Android process,Debug模式大家可能经常用到,感受应该都是比较慢,特别大工程,等待时间就更长了,而另一种相对来说就快很多。

​ 针对Attach debugger 模式开启时会有提示选项 如下图:

Auto
​ 如果希望 Android Studio 自动为您要调试的代码选择最合适的选项,请选择此类型。例如,如果您的项目包含任何 C 或 C++ 代码,Android Studio 会自动使用 Hybrid 调试类型。否则,Android Studio 会使用 Java 调试类型。

Java
​ 如果您只想调试以 Java 编写的代码,请选择此类型 - Java 调试程序会忽略您在原生代码中设置的任何断点或监视。

在早期AndroidStudio 还有如下选项,本人用的AS3.0目前只有Auto/Java

Native
​ 如果您只想使用 LLDB 来调试代码,请选择此类型。使用此调试类型时,Java 调试程序会话视图不可用。默认情况下,LLDB 只检查您的原生代码,而会忽略 Java 代码中的断点。如果您也想调试 Java 代码,则应切换到 Auto 或 Hybrid 调试类型。

Hybrid
​ 如果您想在调试 Java 代码与调试原生代码之间切换,请选择此类型。Android Studio 会将 Java 调试程序和 LLDB 都连接到您的应用进程,一个用于 Java 调试程序,一个用于 LLDB,这样一来,您不必重新启动应用或更改调试配置,便可同时对 Java 代码和原生代码中的断点进行检查

调试区域介绍

​ 接下来了解下调试功能面板(以下就是整个调试区域图)

功能键 名称 功能描述
Rerun Android Debugger 重新恢复调试模式。
Resume Program 一直运行程序直到碰到下一个断点。
Pause Program 暂停程序,等待下一步操作。
Stop 停止当前调试。
View Breakpoints 查看你设置过的所有断点并可以设置断点的一些属性。
Mute Breakpoints 启用/禁用所有断点。
Show Execution Points 具体功能还待发掘
Step Over 程序向下执行一行,如果当前行有方法调用,这个方法执行完毕返回,然后到下一行。
Step Into 程序向下执行一行,如果当前行有用户自定义方法(非官方类库方法)调用,则进入该方法。
Force Step Into 程序向下执行一行,如果当前行有方法调用,则进入该方法。
Step Out 如果在调试的时候你进入了一个方法,并觉得该方法没有问题,你就可以使用step out跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。
Run to Cursor 一直运行到光标所在的位置。
Evaluate Expression 通过它可以查看当前类中所有的变量的值,并且可以计算表达式的值,甚至可以运行某个函数,得到结果。
New Watch 添加观察属性,调试时能方便观察该属性变化。

断点类型

左侧断点类型介绍

Java Line Breakpoints 执行到当前行触发此断点

Java Method Breakpoints 断点位置与方法名同行,愈加方便的观察参数和返回值

Java Field Watchpoints 断点位于某个字段属性声明位置,当字段被重新赋值时触发断点

Java Exception Breakpoints 当抛出某个异常时,自动触发

Exception/Symbolic Breakpoints 未知

右侧功能区介绍

Enable 断点是否可用

Suspend 执行到断点时,程序是否暂停

Condition 执行此断点条件

Log message to console 执行到此断点时,打印一行日志

Evaluate log 执行到此断点时,打印一样的自定义日志,可以包含程序中的变量或表达式

Remove once hit 断点触发后移除

高级调试应用

​ 很多时候简单的调试对于复杂的逻辑定位比较困难,有时可能需要反复尝试才能找出问题所在。特别对于一些代码量庞大的类,如果普通调试时要跟踪某个变量的变化是比较费时的,还有一些对于网络请求场景,如果要修改传递异常的参数,只能手动改代码,然后重新开始调试,可以说相当麻烦。然后AndroidStudio已经提供了强大的调试功能,可以很方便在调试过程中实时跟踪变量值变化或修改,以及表达式操作,日志输入等。

增加观察变量

动态修改变量值

​ 举个例子:对于方法test2中 ,只有当for循环里面条件满足 field1 == 3时才会给field1赋值并调用test3方法,此种场景中,如果当i < 100甚至 i< 1000,field1 == 90时,跟踪执行无疑会非常费时,但可以用更简单的方法实现,模拟满足这一条件,就是调试过程中改变field1成任意我们想要的值,怎么做呢?



很简单,点击此变量,鼠标右键Set Value或F2,然后就可以设置成任意我们想要的值就可以了。

条件断点

​ 当执行到某一断点时,常规流程时,执行此断点,但由于某原因并不想立刻执行断点时,就可以使用条件断点,设置此断点执行条件,满足条件后再执行。

​ 设置断点条件后,只有当field1变量满足field1 == 3 时该断点才会执行,并打印日志,此过程并不阻碍代码执行。

​ 可以看到,当满足断点执行条件后才执行,并打印了断点日志,对于此种情况大家可以举一反三,相信实际开发中能很大程度上提高调试效率。

异常断点应用

​ 程序崩溃应该是所有程序员最深恶痛绝的吧,在我这明明是正常的,到你那怎么会崩溃呢?对于明显的崩溃情况都能快速定位出来,而对于隐藏较深的崩溃情况,可能还一时半会找不出原因所在,无法快速定位怎么办呢?是时候尝试下异常断点了,这种无需手动打断点,只需开启调试模式并在断点视图上选中Java Exception Breakpoints,然后执行,慢慢等待Bug露出原形了。

开启异常断点
执行程序,跟踪结果

​ 可以看到,整个过程并没有打任何断点,设置了异常断点后,发生Exception时自动定位代码行,并正常输出日志,是不是相当方便、快捷。

​ 本文介绍内容对于AndroidStudio强大的调试功能,只是冰山一角,希望对大家有或多或少的帮助,减少Bug是我们的宗旨,远离加班是我们的理想。以后发现更好玩的调试功能继续完善!!!

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

推荐阅读更多精彩内容