AndroidStudio调试之旅
在通俗开发中不免会写出一些bug,明显的bug通过火析代码能够找出来问题所在,但也会有一些隐躲很深的bug,单凭肉眼阐发代码很难定位,那个时候就需要编译器协助,AndroidStudio就供给了十分强大的调试功用,搀扶帮助我们能快速定位处理bug,告别加班!!!
开启调试形式
起首领会下开启调试的办法,在AndroidStudio中开启调试形式有两种办法,即通俗Debug和AttachdebuggertoAndroidprocess,Debug形式各人可能经常用到,感触感染应该都是比力慢,特殊大工程,期待时间就更长了,而另一种相对来说就快良多。
针对Attachdebugger形式开启时会有提醒选项如下图:
Auto
假设期看AndroidStudio主动抉择最适宜的选项,请抉择此类型。例如,假设您的项目包罗任何C或C++代码,AndroidStudio会主动利用Hybrid调试类型。不然,AndroidStudio会利用Java调试类型。
Java
调试以Java编写的代码,请抉择此类型-Java调试法式会漠视在原生代码中设置的任何断点或监视。
在早期AndroidStudio还有如下选项,本人用的AS3.0目前只要Auto/Java
Native
只想利用LLDB来调试代码,请抉择此类型。利用此调试类型时,Java调试法式会话视图不成用。默认情状下,LLDB只查抄您的原生代码,而会漠视Java代码中的断点。假设也想调试Java代码,则应切换到Auto或Hybrid调试类型。
Hybrid
展开全文
想在调试Java代码与调试原生代码之间切换,请抉择此类型。AndroidStudio会将Java调试法式和LLDB都毗连到当前利用历程,一个用于Java调试法式,一个用于LLDB,如许一来,没必要从头启动利用或更改调试设置装备摆设,即可同时对Java代码和原生代码中的断点停止查抄。
调试区域介绍
接下来领会下调试功用面板(以下就是整个调试区域图)
断点类型
左侧断点类型介绍
JavaLineBreakpoints施行到当前行触发此断点。
JavaMethodBreakpoints断点位置与办法名同业,愈加便利的看察参数和返回值。
JavaFieldWatchpoints断点位于某个字段属性声明位置,当字段被从头赋值时触发断点。
JavaExceptionBreakpoints当抛出某个反常时,主动触发。
Exception/SymbolicBreakpoints未知。
右侧功用区介绍
Enable断点能否可用。
Suspend施行到断点时,法式能否暂停。
Condition施行此断点前提。
Logmessagetoconsole施行到此断点时,打印一行日记。
Evaluatelog施行到此断点时,打印一样的自定义日记,能够包罗法式中的变量或表达式。
Removeoncehit断点触发后移除。
高级调试利用
良多时候简单的调试关于复杂的逻辑定位比力困难,有时可能需要频频测验考试才气找出问题所在。特殊关于一些代码量浩荡的类,假设通俗调试时要跟踪某个变量的改变是比力费时的,还有一些关于收集恳求场景,假设要修改传递反常的参数,只妙手动改代码,然后从头起头调试,能够说相当费事。然后AndroidStudio已经供给了强大的调试功用,能够很便利在调试过程中实时跟踪变量值改变或修改,以及表达式操做,日记输等出。
增加看察变量
动态修改动量值
举个例子:关于办法test2中,只要当for轮回里面前提称心field1==3时才会给field1赋值并挪用test3办法,此种场景中,假设当i100以至i1000,field1==90时,跟踪施行无疑会十分费时,但能够用更简单的办法实现,模仿称心那一前提,就是调试过程中改动field1成肆意我们想要的值,怎么做呢?
前提断点
当施行到某一断点时,常规流程时,施行此断点,但因为某原因其实不想立即施行断点时,就能够利用前提断点,设置此断点施行前提,称心前提后再施行。
设置断点前提后,只要当field1变量称心field1==3时该断点才会施行,并打印日记,此过程其实不障碍代码施行。
能够看到,当称心断点施行前提后才施行,并打印了断点日记,关于此种情状各人能够触类旁通,相信现实开发中能很大水平上进步调试效率。
反常断点利用
法式瓦解应该是所有法式员最深恶痛绝的吧,在我那明明是一般的,到你那怎么会瓦解呢?关于明显的瓦解情状都能快速定位出来,而关于隐躲较深的瓦解情状,可能还一时半会找不出原因所在,无法快速定位怎么办呢?是时候测验考试下反常断点了,那种无需手动打断点,只需开启调试形式并在断点视图上选中JavaExceptionBreakpoints,然后施行,渐渐期待Bug露出原形了。
开启反常断点
施行法式,跟踪成果
能够看到,整个过程并没有打任何断点,设置了反常断点后,发作Exception时主动定位代码行,并一般输出日记,是不是相当便利、灵敏。