逮虾户!Android程序调试竟简单如斯(中)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本节讨论的是Android开发中老生常谈的程序调试。 一个开发仔的日常离不开:写BUG和解BUG,特别是多人协作的时候, 帮别人擦屁股(解Bug)的情况屡见不鲜。另外,接盘别人的项目,着手解 Bug也能帮你快速的上手项目。综上,修炼好「调试」这门技能显得尤为重要。 但是,但是感觉很多玩家还停留下无脑打印的阶段,所以有了这篇文章。

1)基本的调试流程


一般的调试流程图如下所示:(核心就是下断点,单步调试,值跟踪



2)下断点


先说说断点,不是张敬轩的《断点》,调试时的断点的作用是:


当程序执行到断点所在的代码时,会暂停应用程序的运行,线程被挂起,然后 可以通过调试器进行跟踪。


下断点的方式也很简单,点击某行代码的左侧,会出现如图所示的小红点。



这个小红点就是断点,而在AS中,又有着多种类型的断点,带你们过一遍吧:


① 行断点


就是上面这种,对特定行进行调试时用到,点击行所在的左侧边栏即可设置。 右键点击这个断点,会弹出如下所示的设置对话框:



如果你取消了Enabled勾选,断点就处于如图所示的禁用状态:



② 方法断点


如果你把断点下到一个方法前,断点就会变成这样:



这个就是方法断点,一般用来检查方法的「输入参数」与「返回值」。



③ 变量断点


有时我们对程序运行过程并不关心,而只关注某个变量的变化,可以在变量定义前加一个断点。



在程序运行过程中,如果该变量的值发生改变,程序会自动停下来,并定位到变量值改变的地方,供开发者调试。



另外,右键还可以设置断点,Watch面板有两个特有的选项,可按需勾选:


  • Field access:字段被访问时触发断点。


  • Field modification:字段被修改时触发断点。


④ 条件断点(断点设置Condition)


有时会有这样的场景:把断点打到循环体的中,我们只关心特定循环次数下的运行情况。 比如一个循环10次的循环体,我们想知道循环到第8次时的运行情况,如果你不知道 条件断点的话,你需要一直按「Run to Cursor」直到满足我们的条件。比如下面的代码:



我们想知道当i = 8的时候,sum为多少,你需要一直按「Run to Cursor」



按7次,直到i = 9位置,如果用条件断点,当循环体执行到某个条件才停下来,右键断点,输入如图所示的等式条件:



然后可以发现,程序直接跳到i=8的时候才挂起,非常方便。



⑤ 日志断点


调试的时候我们可以通过打印日志的方式来定位异常代码大概位置,以缩小引发问题的范围,然后 再使用断点精确定位问题。如果是普通的打印日志,我们需要等待重新构建程序,如果用「日志断点」 就避免这个无意义的等待。使用日志断点非常简单,右键断点,去掉「Suspend」的勾选,会出现 如下所示的弹窗,勾选「Evaluate and log」在此输入想输出的内容。



运行调试后,当执行到日志断点的时候可以看到控制台输出了对应的日志信息,而且程序正常运行,并不会挂起。



如果想查看更详细的信息,比如断点的位置和触发时的堆栈信息,可以勾选

"Breakpint hit" message」和「Stacktrace」,勾选后输出内容会变得更详细:



⑥ 临时断点


所谓的临时断点就是:触发一次后就自动删除的断点。设置的方法有两种:

  • 1.光标移到想打点的行,点击菜单栏「Run」->「Toggle Temporary Line Breakpoint」,

等价于快捷键:「Ctrl+Alt+Shift+F8


  • 2.更便捷的操作:按住Alt,鼠标点击左侧边栏。



鼠标点击后可以去掉临时断点,如果想把临时断点变成普通断点,可以取消勾选 「Remove once hit」的选项。



⑦ 异常断点


用于监听程序异常,一旦程序奔溃,直接定位到异常所在的确切位置。依次点击: 「Run」->「View Breakpoints」打开断点视图。点击「+」,然后选择 「Java Exception Breakpoints」,在弹出的窗口中输入要调试的异常:




除了设置异常断点外,你在这里看到项目设置的所有断点,并进行断点管理与配置。 另外,你还可以设置自定义异常断点,点击「4.Exception Breakpoints」自行配置即可。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
设计模式 算法 前端开发
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
Android面经分享,失业两个月,五一节前拿到Offer,设计思想与代码质量优化+程序性能优化+开发效率优化
|
4月前
|
Shell Linux 开发工具
"开发者的救星:揭秘如何用adb神器征服Android设备,开启高效调试之旅!"
【8月更文挑战第20天】Android Debug Bridge (adb) 是 Android 开发者必备工具,用于实现计算机与 Android 设备间通讯,执行调试及命令操作。adb 提供了丰富的命令行接口,覆盖从基础设备管理到复杂系统操作的需求。本文详细介绍 adb 的安装配置流程,并列举实用命令示例,包括设备连接管理、应用安装调试、文件系统访问等基础功能,以及端口转发、日志查看等高级技巧。此外,还提供了常见问题的故障排除指南,帮助开发者快速解决问题。掌握 adb 将极大提升 Android 开发效率,助力项目顺利推进。
99 0
|
6月前
|
安全 Java Android开发
05. 【Android教程】Android 程序签名打包
05. 【Android教程】Android 程序签名打包
63 1
|
4月前
|
Ubuntu Android开发
安卓系统调试与优化:(一)bootchart 的配置和使用
本文介绍了如何在安卓系统中配置和使用bootchart工具来分析系统启动时间,包括安装工具、设备端启用bootchart、PC端解析数据及分析结果的详细步骤。
197 0
安卓系统调试与优化:(一)bootchart 的配置和使用
|
6月前
|
安全 API Android开发
Android打开USB调试命令
【6月更文挑战第20天】
198 1
|
5月前
|
Oracle Java 关系型数据库
Android studio 安装以及第一个程序
Android studio 安装以及第一个程序
133 0
|
6月前
|
Java Android开发
程序与技术分享:Android使用Dagger注入的方式初始化对象的简单使用
程序与技术分享:Android使用Dagger注入的方式初始化对象的简单使用
145 0
|
6月前
|
安全 网络协议 网络安全
程序与技术分享:Android应用安全之数据传输安全
程序与技术分享:Android应用安全之数据传输安全
|
7月前
|
存储 定位技术 开发工具
Android 开发前的设计,Android之内存泄漏调试学习与总结
Android 开发前的设计,Android之内存泄漏调试学习与总结
|
7月前
|
XML Java Android开发
如何美化android程序:自定义ListView背景
如何美化android程序:自定义ListView背景
63 2