Android Studio调试技巧

   由于之前的工作一直是维护android系统,与framework相关的工作,定位问题全使用打Log然后观察Log的方式,没法使用debug的方式。后来改做上层应用,一开始使用eclipse开发,由于使用eclipse来调试android应用不是非常快捷方便,所以我仍然首选打Log的方式定位问题,极少用到debug。直到改用android studio来开发,我就爱上debug了,使用android studio来调试应用,方便快捷,功能强大,定位问题的神器。它的调试技术不仅仅是下个断点单步执行,或者简单的条件断点,各种强大的功能会让你欣喜不已。

启动调试的方式
android studio有两种方式启动调试:1、下好断点,然后用debug模式编译安装这个app,应用运行到断点处就会停下来,这也是我们最常见的启动调试的方式。2、这是我个人比较喜欢的,用到比较多的方式,在启动apk之后,下好断点,然后attach process到指定进程,条件触发之后就可以直接进入调试模式了。方法是在顶部的工具栏找到一个Attach debugger to Android process的按钮,点击这个按钮会弹出一个对话框,或者打开Run菜单点击最后一项,选择设备和要调试的进程(Process),如果没有看到进程,选中Show all processw,然后点击OK就行了。见下图
这里写图片描述

下断点技巧
1、条件断点
假设你的断点在一个列表的循环里面,可是你只对这个列表的某一个元素感兴趣,只想在遇到这个元素的时候才断下来;如果按照常规的单步执行,那可能会把我们整疯,有没有完美的方法调试这种场景呢?条件断点就是满足这种需求的,它是在特定条件下的断点。使用起来也非常简单,在你的断点上鼠标有件会出现一个小窗口,写上条件即可。
这里写图片描述
2、日志断点
很多时候我们更喜欢使用打印日志定位异常代码,缩小范围之后再使用断点解决问题;所以我们经常要做的事情就是在代码里面添加日志信息,输出函数参数,返回信息,输出我们感兴趣的变量信息等。但是这么做一个问题就是,我们添加了日志代码需要重新编译;如果漏掉了某处日志,则需要重新添加日志再编译安装,这样来来回回的折腾非常痛苦,android studio退出了日志断点解决这个问题。首先我们在想要输出信息的地方下一个断点;然后右键这个断点,在出现的设置框里面把这个断点的 suspend 属性设置为 False ,这样虽然叫做“断点”,但是并不会真正断下来;然后,我们在 log message 里面填上我们想要输出的日志信息。这样,每次代码执行到这个断点的位置,这个断点并不会使程序停下来,而是输出它的日志信息,然后继续执行;非常方便。
3、方法断点
传统的调试方式是以行为单位的,所谓单步调试;但是很多时候我们关心的是某个函数的参数,返回值。使用方法断点,我们可以在函数级别进行调试;如果经常跳进跳出函数或者只对某个函数的参数感兴趣,这种类型的断点非常实用。具体使用方法有两种方式;一种是在你感兴趣的方法头那一行打上断点,会发现断点图标有点不一样,这就是方法断点了。第二种是在断点设置窗口里设置。
4、异常断点
在有些情况下,我们只对某些特定的异常感兴趣,我们希望只要程序发生异常程序就能断下来;第一时间保存异常现场。异常断点来了,可以在特定异常发生的时候,直接让整个程序断下来;如果你对所有异常感兴趣,直接 Throwable 即可。
这里写图片描述
点击左上角的加号,会出现一个选择框;选择Exception Breakpoint ;然后会出现一个对话框,选择你感兴趣的异常。上图中,我们可以看到有四种类型可以选择,第一种是方法断点,第三种是异常断点,第二种就是下面介绍的变量观察。
5、变量观察
你发现某个值莫名其妙的不知道什么时候被谁给修改了,那这个 Field WatchPoint 的功能就非常有用了,使用它我们可以在某个 Field 被访问或者修改的时候让程序断下来。下断点的方式也有两种;第一种是直接在某个字段的声明处下断点,这时候断点图标会改变。另外一种方式是 Run -> View BreakPoint 打开设置,与异常断点类似。
6、临时断点(Temporary Breakpoints)
这种断点在你第一次断点停下之后,就会被移除,也就是在调试过程中只会断掉一次。下好断点后,ALT+鼠标左键 在断点区点击。或者使用快捷键Ctrl+Alt+Shift+F8即可。
7、失效断点(Disable Breakpoints)
这种断点适用于你不想删除这个断点,但是又不想让这个断点执行,所以暂时让他失效掉。ALT+鼠标左键在断点上点击。

执行断点技巧
1、step over
快捷键F8,越过子函数,但子函数会执行。程序向下执行一行,如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行。
2、step into
快捷键F7,进入子函数。程序向下执行一行。如果该行有自定义方法,则运行进入自定义方法,但不会进入官方类库的方法。
3、Force step into
强制进入任何方法,研究源码使用非常方便。
4、step out
快捷键Shift + F8,跳出子函数。如果在调试的时候你进入了一个方法,并觉得该方法没有问题,你就可以使用stepout跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。
5、Run to Cursor
快捷键Alt + F9,运行到光标所在的位置。
6、Drop frame
点击该按钮后,将返回到当前方法的调用处重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法。
7、跨断点调试
如果当前有多个断点,你想直接运行到下一个断点,点击绿色的按钮。
这里写图片描述
如果后面代码没有断点,再次点击该按钮将会执行完程序。
8、show Execution Point
当你不知道程序当前已经执行到哪里的时候,就可以使用这个功能。Android Studio 会跳到执行行所在的界面,并将该行高亮的显示出来。
9、变量赋值
我们的代码里有一个变量,这个变量的值会影响到程序的执行结果,如果我们想观察这个变量在不同的赋值下程序的执行结果怎么办呢?最傻的做法是一遍遍的在代码里修改变量值,然后重新运行程序,这当然不是我们想要的。利用Debug模式下的变量赋值(Set Value),只需要运行一次,就能达到我们的观察效果。在使用该变量的代码处打个断点,然后在Variables窗口找到对应的变量,修改变量值并执行即可。
10、对象求值
在断点处,如果有变量对象,系统提供了表达式求值功能,针对Variables视图中的变量对象,我们可以输入任何计算语句,实时查看表达式计算结果。具体操作为,右键Variables视图中的变量对象,选择Evaluate Expression,弹出表达式窗口,输入任何你想要的计算语句,点击Evaluate计算按钮,即可显示Result结果。

我们常用的调试技巧都已经在这里的,还有更多的功能细节,就不一一细说了,在工作中去发现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值