引子
亲,学习多年Android还一直在打log?就算用了log库装起哔来也渐渐力不从心。不仅脸上挂不住,一多还特别烦。
我想基本刚开始做开发的coder们这算是最常用的Debug方法了,也被称为最低端coder调试方法。基本就是人脑Debug。而且这种方法有个最蛋疼的地方就是每次修改日志输出、代码后就要重新发布一次app,然后就在那儿等AS编译、打包、安装APK,一路下来再少也得花上半分钟吧,尤其是工程大了后,调一次想死的心都有了(即使AS现在可以采用Instant run热发布,但是Instant run有个坑就是有时候代码改了后你会发现发布上去的代码还是没改过的,只能使用Rerun或者Stop APP后才会有用)。此方法用来调试程序在一些分析程序流程、把一些传递的数据输出以便于分析的时候还是有用的。总之别拿这个当Debug的工具。
现推出豪华打断腿礼包,教您领略AS的无限魅力!
单击红框中的按钮可以用debug模式运行app。
附着调试(Attach Debugger)这个按钮可以在不重启app的情况下,选择已经运行的app进入调试模式。
调式操作区
依次是八个按钮
- 显示执行点:Show Execution Point:点击该按钮,光标将定位到当前正在调试的位置。
- 步过:Step Over(F8):单步调试且不进入方法内部
- 步入:Step Into (F7): 单步调试且进入方法内部,如果是类库的方法则不会进入。
- 强制步入:Force Step Into:一行一行往下跑,不管是自定义的方法还是类库的方法 (很少用到)
- 步出:Step Out(Shift + F8):会快速运行完该方法,跳出当前执行的方法内部,执行到该方法调用的下一句代码。
- 删除帧:Drop Frame:将执行点移回从堆栈中删除当前方法帧的方法调用(大意理解为中断执行,并且如果该方法是被调用的,则返回到当前方法被调用处,并且所有上下文变量的值也恢复到该方法未执行时的状态。)
- 运行到光标所在的点:Force Run to Cursor:可以忽视已经存在的断点,跳转到光标所在处。(神器)
- 计算表达式:Evaluate expression:可以通过表达式求值
点击该按钮将使程序继续运行,如果还有下处断点,则跳转到下一个断点。
变量观察区
右键添加到变量监控区,十分方便的查看集合数组的数据。
断点分类
条件断点
点击创建断点。右键断点,输入条件。只有当满足条件时,才会进入到断点中。想想以前傻傻的F8,果然还是偷懒比较爽!
日志断点
该类型的断点不会使程序停下来,而是输出日志信息,然后继续执行。有了这个神器,就不需要再打log了。
取消勾选Suspeng复选框(即表示程序运行至此断点时不会停下来供开发者调试),然后勾选Log evaluated expression:,并输入打印语句即可。
变量断点
如果该变量的值发生改变,程序会自动停下来,并定位在改变变量值的地方。
方法断点
在定义方法的第一行打断点,可以方便的观察到方法的参数和返回结果。
异常断点
在调试过程一旦发生选定的异常,调试器就会定位到异常发生处。
- 具体步骤
Ctrl+Shift+F8 唤出断点管理页面。
实验中碰到的坑
android Run模式也会出现"Waiting for debugger"的解决方法
出现“waiting for debugger”窗口是在debug模式下运行出现的。但是,在去除断点且在run模式下也出现了此窗口,并且一直如此。卸载程序重新运行也是如此。网上说的重启adb也木有用。
- 解决方案:重启模拟器 (泪奔)