我说实话,我从去年大三暑假,也就是2015.8月份开始接触Android,到现在已经工作10个月了,从eclipse 用到 AndroidStudio,但是几个月前我才知道用断点调试调试程序的,你造吗?有人问我那你之前是怎么过来的,还写了好几个项目的?我只能哭着说我是靠打印日志活下来的.
先来用图片体验一把:
这是我把以前写的关于音乐播放器的学习项目,翻出来编译运行一下,随便点击跳转几个页面,就打印出来了这么多日志.可见我之前是怎么调试的,而且调试完还忘记删,获取是留着下次用.其实你仔细看,还不是Log日志,是System.out.println();注意左侧还写了名为qqq的过滤器,过滤System.out.XXX……….
我使用打印日志的方法调试的步骤是这样的:
1.猜测大概哪里出现了问题,在问题附近打印日志,例如一个方法,我需要跟踪那个方法的参数和返回值
2.在进入方法打印一句,判断进入方法前,参数的值是否正确
3.在方法中打印一句,判断进入方法了,而且值是否正确传输了
4.方法调用结束,打印返回值
5.如果不是想要的结果,在方法里面我还要一步一步打印…
6.运行,打印日志信息
7.为了方便查看,最好给日志加上过滤信息,就像上面的我心酸的qqq一样
我现在看以前的自己,真的感觉那个时候的自己好傻好坚强.
1.判断大概哪个地方出现了问题
2.在怀疑的代码旁加上断点
3.点击调试运行
4.程序到断点的地方停下来,接下来我们就一步步开始即可
5.没有5了,断点调试超级方便
1.在怀疑的代码上加上断点:
2.点击debug调试
3.程序执行到断点出就可以调试了
4.断点按钮组选择直接执行到下一行代码,还是到方法里面一步步执行,我这里选择进入方法,是不是能看到每一行的值
这样是不是比打印日志好多了.是吧?是的.
1.添加断点
方法: 如上图,在代码编辑区显示行数的左边空白区域,单击鼠标
2.debug
两种开启调试的方法:
debug调试:
开始方法: 点击绿色小昆虫图标开始调试
适用场景:程序未运行,点击debug,开始调试模式运行.
attach debugger to Android Progress:
开始方法:点击 开始调试
适用场景:程序已经运行了,这个时候想要调试了,不需要重新debug重新开始程序,可以选择直接点击attach debugger,选择要调试的进程,直接进入调试模式.
3.执行到断点,开始调试
这一步主要是要看我们的debug面板(就是下面这个),分为几个部分,
(1)断点单步调试区
(2)断点管理区
(3)调试信息观察区
Step Over(F6) : 执行到下一行代码
Step Into(F5):进入到当前方法中,仅限于自定义的方法,系统方法进不去
Force Step Into(Alt +Shift+F7):强制进入方法,包括系统方法
Step Out(F7) : 跳出方法或者下一个断点,就直接到下一个断点(跳到下一个断点这个功能的我不常用,一般使用左侧断点管理区的绿色小三角按钮)
Run To Cursor(Ctrl+R): 快速进入当前代码执行的地方,多用于循环
Evaluate Expression (Ctrl+U): 表达式求值
Resume Program(F8):直接跳到下个断点,不过没有下个断点,就直接结束了调试
Pause Program: 暂停调试
Stop(Ctrl+F2): 直接结束调试
View Breakpoints(Ctrl+Shift+F8): 查看设置的断点们
Mute Breakpoints: 将设置的全部断点的状态置为无效,有点取反的意思,当有效的时候点击断点全部变为有效,反之无效变为无效
Get thread dump: 获取线程的帧栈区,包括线程的名称,运行状态等
Setting: 关于断点调试的一些设置
有以下的值:
名称 | 功能解释 |
---|---|
Show Values Inline | 调试过程中开启该功能,将会代码右边显示变量值,默认开启 |
Show Method Return Values | 调试过程中开启该功能,将在变量区显示最后执行方法的返回值 ,默认不开启 |
Auto-Variables Mode | 开启这个功能后,idea的Debugger会自动评估某些变量,大概就是当你执行在某个断点时,Debugger会检测当前调试点之前或者之后的变量的状态,然后在变量区选择性输出,例如下面没调用这个变量了,那这个变量就不显示在变量区了. 默认不开启 |
Sort values alphabetically | 开启这个功能的化,变量区中的输出内容,例如变量名或者方法名,会按照按字母顺序进行排序,默认不开启 |
如果这些描述,小伙伴们想知道具体勾选与不勾选,影响了什么,可以自己点击试试,那才是最生动形象的演示,请相信我,我只是懒的贴图了.
1、对象变量区-Variables窗口
这个窗口是主要显示debug下,代码执行处的变量的值,你可以对显示的值做一些操作,
例如:
SetValue–手动设置指定的值
Evaluate Expression –计算表达式
Add to Watches–添加到Watches窗口
等等,这里不列了,小伙伴们大可都去试试
2、变量观察区- Watches窗口
观察窗口,顾名思义,就是专门用来观察数据的值得窗口.这个窗口存在的意义是,如果多个标量或者多个表达式在多个不同的地方,要上下观察是很麻烦的,我们可以把它Add to Watchs, 然后在观察窗口就可以一次看到多个变量值;
添加到这个窗口的方式有以下几种:
1、变量右键选择 Add to Watches
2、Watches窗口中点击+号,输入观察的数据,这里我要提醒小伙伴一下,这里不限于是变量的名称,你完全可以数据一个表达式什么的,例如a+5,a >0等等,非常方便.
3、线程帧栈区- Frames窗口和Threads窗口
说实话,这个窗口我没自己实践过,只是大概知道是做线程调试的,想想都很强大,等我研究一下,用过再来写
AndroidStudio还提供了让调试更加快捷的一些小技巧~再写下去篇幅就太长了
新开一篇,可爱的传送门在这里 AndroidStudio-断点调试-让你的调试更有效率
[Android Studio 权威教程]断点调试和高级调试
你所不知道的Android Studio调试技巧
Android Studio代码调试大全