小工具知识网

当前位置: 首页 > 行业知识 > Android开发 ——Android Studio工具Debug调试技巧,看这一篇就够了

行业知识

Android开发 ——Android Studio工具Debug调试技巧,看这一篇就够了

2026-11-01 01:14:57 来源:互联网转载

调试基础

一般来说我们有两种办法调试一个debuggable的apk;

  • 设置好断点,然后用debug模式编译安装这个app;

  • 执行attach debugger to Android process,即将debug进程添加到当前进程中。

    一般比较常使用的debug方式是attach debugger to Android process:

    在执行按钮右侧两个的带有小虫子的按钮其实就是Attach Debugger to Android process按钮。

    我们可以在启动apk之后,直接下断点,然后attach process到指定进程,条件触发之后就可以直接进入调试模式。

    断点调试

    断点调试是最基本操作,基恩的断点调试有以下的几个常用的调试命令:

    • F5跳转内部执行

    • F6跳转下一步

    • F8跳转到下一个断点

      如何添加断点?

      直接在Android studio中的Java源代码左侧,想调试某一行代码的话,直接单击若左侧出现了一个小红圈,则说明断点已经添加好了:

      当代码处于debug模式,并且执行到此处的时候就会卡住在这里。

      执行断点调试

      执行attach debugger to Android process,当代码执行到含有断点的时候就可以将程序卡到断点的代码了:

      这时候我们可以看到在该行代码中可以看到相应的局部变量值,执行F6走到下一步,执行F8,调试到下一个断点。

      添加观察变量

      在调试模式下,选择变量,并右击:

      这时候选择Add to watches,就可以将变量添加到观察列表了。

      表达式调试:Evaluate Expression

      这个调试功能非常的实用,也是我最喜欢的功能,使用ctrl + u快捷键可以弹窗表达式调试弹窗:

      这个功能非常实用,可以在断点处直接进入一个求值环境,在这里你可以执行任何你感兴趣的表达式可以在表达式调试弹窗中写任何java表达式,比如:

      其他的比如在断点处有一个对象object,如果你要查看它的某个属性很简单,在Debug窗口就能看到,但是如果你想要执行它的某个方法看看结果是什么呢?借助这个可以实现。当然它的功能远不止这么多,相当于直接进入了一个 REPL环境,非常实用。

      条件断点

      假设你的断点在一个列表的循环里面,可是你只对这个列表的某一个元素感兴趣,只想在遇到这个元素的时候才断下来;你是一直人肉 F9 直到满足条件吗?条件断点就是满足这种需求的,顾名思义,在特定条件下的断点。使用起来也非常简单,在你的断点上鼠标右键会出现一个小窗口,写上条件即可。

      其他断点调试方式

      除了这里的求值断点,条件断点,还有日志断点,异常断点,方法断点等,具体的可自行google哈。

      总结:

      • Android默认提供了Log API实现对日志的打印功能;

      • 可以实现自定义日志框架,定制化显示日志样式,定制化配置是否显示日志等,可参考:Android日志框架

      • 可以通过配置gradle,让测试环境中显示日志信息,在正式环境中不显示日志信息;

      • Android studio提供了断点调试功能,包含了求值调试,条件断点,日志断点,方法断点,异常断点等等;

        另一片文章:

        0.前言

        Android Studio目前已经成为开发Android的主要工具,作为开发者,调试、发现并解决BUG是家常便饭。正所谓,工欲善其事必先利其器,今天我们就来看看Android Studio中的调试技巧。

        1.调试面板

        首先,来看看Android studio中为我们提供的调试面板(标准情况下):

        点击右上角Restore ‘Threads’View可先展示目前相关的线程信息:

        2.单步调试区

        2.1 Show Execution Point

        点击该按钮,光标将定位到当前正在调试的位置。

        2.2 Force Step Into

        强制单步跳入,和step into功能类似。

        主要区别在于:如果当前行有任何方法,不管该方法是我们自行定义还是类库提供的,都能跳入到方法内部继续执行。

        2.3 Drop Frame

        中断执行,并返回到方法被调用处,在这个过程中该方法对应的栈帧会从栈中移除。并且所有上下文变量的值也恢复到该方法未执行时的状态。

        2.4 Force Run to Cursor 

        非常好用的一个功能,可以忽视已经存在的断点,跳转到光标所在处。

        3.求值表达式

        Evaluate expression 

        点击该按钮会在当前调试的语句处嵌入一个交互式解释器,在该解释器中,你可以执行任何你想要执行的表达式进行求值操作。

        比如,我们在调试时执行到以下代码:

        此时执行EvaluateExpression,在该解释器中我们能做什么呢?在这里,我们可以对result进行求值操作:右键要求值,选择evaluate Expression。此时会显示如下:

        在弹出的输入框中输入求值表达式,比如这里我们输入Math.min(result,50),如下图:

        点击执行,我们发现在Result中已经输出了结果,如下:

        3.断点管理区

        3.1 Return 

        点击该按钮会停止目前的应用,并且重新启动。用于想重新调试时。

        3.2 Pause Program 

        点击该按钮将暂停应用的执行,如果想要恢复则可以使用下面提到的Resume Program。

        3.3 Resume Program

        该操作有恢复应用的含义,但是却有两种行为:

        1. 在应用处在暂停状态下,点击该按钮将恢复应用运行;

        2. 在很多情况下,我们会设置多个断点以便调试。在某些情况下,我们需要从当前断点移动到下一个断点,两个断点之间的代码自动被执行,这样我们就不需要一步一步调试到下一个断点了,省时又省力。

        3.4 Stop

        (1)对普通的Java项目,点击该按钮意味着退出调试模式,但是应用还会执行完成;

        (2)而在Android项目中,点击该按钮,则意味这APP结束运行。

        3.5 View Breakpoints

        点击该按钮会进入断点管理界面,在这里你可以查看所有断点,管理或者配置断点的行为,如删除,修改属性信息等:

        3.6 Mute Breakpoints 

        使用该按钮来切换断点的状态:启动或者禁用。

        在调试过程中,你可以暂时禁用所有的断点,以实现应用正常的运行。该功能非常有用,比如当你在调试过程中,突然不想让断点干扰你所关心的流程时,可以临时禁用断点。

        3.7 Get thread dump

        获取线程Dump,点击该按钮将进入线程Dump界面。

        线程工具区中最常用的是,可以用来过滤线程,其他的不做解释了。

        接下来我们来认识一下线程的类型,表示为不同的图标:

        | 线程状态描述 | 图标 |

        | — | — |

        | Thread is suspended. | |

        | Thread is waiting on a monitor lock. | |

        | Thread is running. | |

        | Thread is executing network operation, and is waiting for data to be passed. | |

        | Thread is idle. | |

        | Event Dispatch Thread that is busy. | |

        | Thread is executing disk operation. |

        |

        3.8 Settings

        点击该按钮将打开有关设置的列表:

        3.8.1 Show Values lnline

        调试过程中开启该功能,将会在代码右边显示变量值,即下图中红框所示部分:

        自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

        深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

        因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

        既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

        由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

        如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)

        作者2013年从java开发,转做Android开发,在小厂待过,也去过华为,OPPO等大厂待过,18年四月份进了阿里一直到现在。

        参与过不少面试,也当面试官 面试过很多人。深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长,而且极易碰到天花板技术停滞不前!

        我整理了一份阿里P7级别的最系统的Android开发主流技术,特别适合有3-5年以上经验的小伙伴深入学习提升。

        主要包括阿里,以及字节跳动,腾讯,华为,小米,等一线互联网公司主流架构技术。如果你想深入系统学习Android开发,成为一名合格的高级工程师,可以收藏一下这些Android进阶技术选型

        我搜集整理过这几年阿里,以及腾讯,字节跳动,华为,小米等公司的面试题,把面试的要求和技术点梳理成一份大而全的“ Android架构师”面试 Xmind(实际上比预期多花了不少精力),包含知识脉络 + 分支细节。

        Java语言与原理;

        大厂,小厂。Android面试先看你熟不熟悉Java语言

        高级UI与自定义view;

        自定义view,Android开发的基本功。

        性能调优;

        数据结构算法,设计模式。都是这里面的关键基础和重点需要熟练的。

        NDK开发;

        未来的方向,高薪必会。

        前沿技术;

        组件化,热升级,热修复,框架设计

        网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

        我在搭建这些技术框架的时候,还整理了系统的高级进阶教程,会比自己碎片化学习效果强太多,CodeChina上可见;

        当然,想要深入学习并掌握这些能力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

        不出半年,你就能看出变化!

        本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

        一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

        AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

        力,并不简单。关于如何学习,做程序员这一行什么工作强度大家都懂,但是不管工作多忙,每周也要雷打不动的抽出 2 小时用来学习。

        不出半年,你就能看出变化!

        本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

        一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

        AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

上一篇:无限云服务器怎么免费获取?

下一篇:DIY盆栽盆制作全攻略,一步步打造独特盆景