3)进入调试模式的另一种方式
大部分的同学调试都是通过点击下面这个只小虫子进入调试模式。
这种方法有个缺点就是:每次都需要重新运行程序,可能有这样的场景:把APP丢给测试 测试,然后出现了一个很稀有的BUG,此时你如果用普通的Debug模式,需要重启APP,但是 Bug不一定能够复现,这就很尴尬了。对于需要动态调试的场景,可以「直接调试正在运行的 Android进程」,点击如下所示的另一个有小虫子的图标:
然后选择要调试的包名,就可以无需重启应用直接进行调试了:
4)调试工具详解
这里把调试工具划分为如图所示的五个区域一个个讲解:
- A区(步进调试工具)
图标 | 名称 | 功能描述 |
显示执行点 | 定位到当前正在调试的断点。 | |
单步跳过 | 一步一步执行,遇到方法直接执行完方法,进入下一步,不会进入方法内部。 | |
单步进入 | 一步一步执行,遇到方法且是自定义的方法,则进入方法内部,否则不会进入。 | |
强制进入 | 遇到方法无论是自定义的还是官方类库的,都会进入方法内部。 | |
单步跳出 | 跳出当前进入的方法,返回方法调用处的下一行(也意味着方法被执行完毕)。 | |
丢弃帧 | 如果你在某个方法内,执行完丢弃帧,当前方法会被中断,返回方法被调用的 地方,变量的值也会重置。 |
|
执行到光标处 | 可以看做是临时断点,程序运行到当前光标所在行暂停。 | |
计算表达式 | 支持在调试过程中,通过赋值或表达式方式修改任意变量的值。 |
!!!注意:上面的执行到光标处是有个前提的:中途没有断点,如果你想强制执行到 光标处的话,你需要「Force Run to Cursor」,你可以通过下述两种方式进行操作:
- 1.光标处右键,选中「Force Run to Cursor」,如图:
- 2.使用快捷键:Ctrl + Alt + F9。
计算表达式(Evaluate Expression)
非常实用,可以动态地查看和修改任意变量得值,除了上面在调试窗口点击计算器图标可以打开外,
你可以在D区点击某个变量右键打开。演示下修改某个变量得值:
修改完后,点击Evaluate,结果如下:
你也可以在这里直接查看变量的值,示例如下:
同样点击Evaluate,结果如下:
- B区(控制调试工具)
图标 | 名称 | 功能描述 |
继续程序运行 | 程序运行到某个断点暂停,如果有下一个断点,点击后跳到这个断点, 没有的话,程序则继续运行。 |
|
暂停程序运行 | 暂停程序运行。 | |
终止程序运行 | 终止程序运行。 | |
查看断点 | 可以查看所有的断点,管理与断点配置 | |
禁用所有断点 | 切换所有断点的状态(启用/禁用),禁用后,程序就不会触发断点。 | |
获得线程堆栈 | 显示线程的相关信息 | |
恢复布局 | 恢复到原始布局 | |
设置 | 调试的相关配置,比如是否显示执行方法后的返回值 |
- C区(帧调试窗口)
这里的帧指的是:堆栈帧,一种用于「存储数据」和「部分过程结果」的数据结构; 每次调用方法在堆栈中都会占用一部分内存,单位是帧,随着方法调用而创建。 每个堆栈帧中包括了:「传入参数」、「返回地址」、「局部变量」以及「对程序调试提供支持的信息」。一个线程包括多个堆栈帧。
查看工具那里可以以上下顺序切换的方方式查看帧(鼠标直接点击也可以),最右侧的漏斗图标 点击后可以过滤掉:「非本应用的帧」。另外,你还可以右键堆栈帧,添加「步进过滤器」、 「导出线程」或「自定义线程显示」。
- D区(变量区)
在这个区域可以看到堆栈帧中当前所有的数据(方法参数、本地变量、实例变量)。 右键某个变量,可以进行「设置\复制变量值」,「跳转到变量在代码中的位置」等操作。 一个常用的操作:选择**「Add to Watches」**,单独监视这个变量的变化。
- E区(监视窗口)
除了前面这种右键添加监视的方法外,你还可以直接在E区点击「+」进行添加。
不止监控变量,还支持监控表达式,比如上面的i+1。 关于Android Debug调试的基本操作大概就这些,多去实战中历练巩固吧!
3.Android Wifi 无线调试
其实还是要先电脑这个也非常简单,安装一个「ADB WIFI」的插件,安装后重启:
然后把APP的调试模式为「Usb Device」
手机连接电脑,依次点击AS的菜单栏:「Tools」->「ADB USB TO WIFI 」,然后左下角会出现:
一般来说,要扫描好久,建议自己看下手机ip,然后通过adb命令进行链接,示例如下:
adb connect 10.1.7.200:5555 # 出现下述信息代表连接成功: connected to 10.1.7.200:5555
连接成功后就可以拔掉数据线,进行无线调试了。
4.利用Network Profiler抓包
Android Profiler是AS 3.0后引入的性能分析工具,而Network Profiler是其中一个用于网络分析的工具, 利用它我们直接抓包,而不需借助第三方的抓包工具(比如Charles)进行分析调试。 比较简单,界面如下:
利用它可以进行很方便的抓包操作。
关于Android程序调试的东西肯定不止这些,上述的算是基本功吧。 有更多调试技巧欢迎在评论区留言~谢谢