干货分享:Android Studio 学习之 Debug 调试

2023-05-16

前言

正所谓,工欲善其事必先利其器,对于一个程序员来说,IDE就是我们器啊。IDE掌控的越熟悉,工作效率就越高(划水摸鱼的时间更多),所以要想效果更高(摸更多的鱼),就要好好学习如何使用IDE。

作为一个Android开发是无疑是幸福的,背靠Google爸爸,加上JetBrain的加持(JB大法好),所以就有了最完美的(不接受反驳)IDE—Android Studio(下文都以AS简称),就是有点吃内存哈😁,当然在16G内存的MBP上这些都不是事。虽然做了3年的Android开发,对于AS一直都是只用到一些最基础的操作,很多方便的技巧都没用到,远远没有发挥它的最大优势,所以决定从头好好学习一下如何最大化使用AS

正题

作为一个程序员,Debug调试技能是必不可少的,正好AS也为我们提供了强大的Debug功能。所以我们今天就来好好学习一下AS为我们提供的调试功能。

基于Android Studio 3.6.2学习。

开启调试

我们先来看看工具栏上面的图标:

下面一一解释图片中标注按钮(123568虽然不属于debug相关知识,顺带说一下):

  1. Run按钮:App已经运行,显示该图标,点击重新运行AppApp没有运行,该图片显示为绿色三角形。
  2. Apply Change and Restart Activity按钮: 通过重启Activity但不重启应用来应用资源和代码更改。通常用于修改了代码或资源文件。
  3. Apply Code Changes按钮: 尝试仅应用代码更改而不重启任何内容。通常用于只修改了代码,没有修改任何资源。
  4. Debug按钮: 开启Debug模式。
  5. Coverage按钮: 待摸索(知道的大佬,告诉我一下)。
  6. Profile按钮: 后面会单独出一篇文章讲解该功能。
  7. Attach debugger to Android process按钮: App已经运行中,点击该按钮,选择需要调试的进程即可。
  8. Stop按钮: 停止运行App

开始调试

当我们进入调试模式时,AS底部会显示Debug窗口,如果 Debug 窗口未打开,请依次选择 View > Tool Windows > Debug。下面我们先来看一张Debug窗口的总览:

我把整个窗口分为多个区域,

  • 菜单显示控制区
  • 1区断点管理区
  • 2区单步调试区
  • 3区堆栈帧线程区
  • 4区对象变量观察区

下面一一讲解。

菜单显示控制区

首先说一下最左边的菜单显示控制区,点击按钮,会弹窗菜单,勾上就代表该菜单要显示,图片中勾上所有的菜单了,所以在右边就能看到对应的菜单,如果取消那个菜单,右边对应的菜单也会隐藏。这个菜单显示大家可以跟自己需求选择。

重点来了!!!

1区断点管理区

竖向依次为:

  1. Return Android Debugger: 重新进入debug模式(App不会重新运行)
  2. Resume Program: 跳到下个断点。
  3. Pause Program: 暂停运行
  4. Stop Debugger: 停止断点模式
  5. View Breadpoints: 查看所有断点(后面会单独讲解)
  6. Mute Breadpoints: 开启\禁用所有断点
  7. Get Thread Dump: 获取线程Dump,点击会进入线程Dump界面(后面)
  8. Setting: 对一些菜单的显示控制
  9. Pin Tab: 多个程序调试时,固定Tab。作用摸索ing...

下面找重点的来讲解一下:

View Breadpoints:

还是先上图

断点展示区:

展示了所有有断点地方,在这里我们可以快速删除不需要的断点,增加程序运行速度。当然我们还可以添加我们关心的异常,就是常说的异常断点,比如NullPointerException,点击左上角➕,弹出菜单(如下图),大家可以根据自己的需求去选择不同的类型,这里我们选择Java Exception Breakpoints,然后在搜索框中输入 NullPointerException,会模糊匹配,然后选择NullPointerException就可以加入断点展示区了。

这样当我们代码出现空指针异常的时候,就会断点定位到发生异常的位置,非常方便。当时大家还可以添加其他种类的异常。

菜单设置区:

这个菜单可以点击左侧的断点管理区的View Breakpoints,还可以右键打断点的红点(如下图)

  1. Enable: 是否开启该断点。

  2. Suspend: 默认情况下,Android 系统会在其访问您分配给观察点的内存块时暂停应用进程。后面All表示暂停所有线程,Thread代表暂停当前线程。可以取消选择此选项,当你取消的时候红色断点会变成黄色,上图可以看到。

  3. Condition: 这个非常有用,就是常说的条件断点。一般用在循环里面,比如一个for循环,当i=8的时候,执行某个操作,难道你要循环一遍遍走吗?(我之前就是这么干的😂),其实可以直接在condition里面设置条件,如下图显示

 

可以看到我们`condition`增加条件的时候,红色断点下面多了个小问号,`num`也直接变成8,不用一步步循环到8了。

  1. 'Breakpoint hit' message: 勾上会输出Breakpoint hit

  2. Stack trace: 勾上会输出堆栈信息。

  3. Evaluate and log: 常说的日志断点,我们一般喜欢通过写代码打log来观察变量的变化,然后再删掉;这样一是麻烦,二是如果忘记,影响代码的美观性。这时,你就需要日志断点,如下图

 

这样我们就可以打印我们想看的变量了。

  1. Remove once hit: 就是停一次就移除,这样我们临时打的断点就不存在忘记取消的问题了。

重重重点来了!!!

2区单步调试区

Debug窗口上方只给出部分单步调试按钮,不过,我们平时用也够了。为了展示AS全部的单步调试按钮,我对run菜单下面的单步调试按钮进行讲解,如下图

Step Over(F8): 单步跳过,要前进到下一行代码(而不进入方法),如果方法内部有断点,会暂停。

Force Step Over: 不论方法中是否有断点,都会直接执行完方法所在代码行的下一步,不会在断点处暂停

Step Into(F7): 单步跳入,如果断点包含子方法则进入方法(不会进入官方类库的方法)。

Force Step Into: 强制单步跳入,在Step Info的基础上能进入任何方法。

Smart Step Info: 断点处包含两个或者以上方法链式调用,可以选择进入那个方法,包括匿名内部类,lambda表达式也可以,看下图。

这时你可以点击get或者getAccessToken方法内部进行调试。

Step Out(⇧F8): 单步跳出,与单步跳入相对,要前进到当前方法之外的下一行。

Run to Cursor: 执行到光标出(中途没有断点)。

Force Run to Cursor: 强制执行到光标出(无论有无断点)。

Drop Frame: 点击该按钮后,你将返回到当前方法的调用处重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法。

Evaluate Expression: 可以输入任何符合语法的计算表达式,包括变量,方法等调用。

  • 计算表达式

  • 方法调用

3区堆栈帧线程区

3区包含FramesThreadsFrames可以检查导致遇到当前断点的堆栈帧,和后面4区查看变量有关联。Threads展示当前进程的所有线程。这个区域我用的很少,更多作用待我摸索,对这个区域玩的6的大佬,可以在评论区分享一下。

4区对象变量观察区

这个区域我们平时也用的非常多,我们需要观察的一些变量值,都在这个区域观察。 相信大家都遇到过,我们写好代码,需要根据接口返回的状态进行不同的操作,但是状态永远只会有一种,我们怎么调试每一种状态,我们的代码业务逻辑走的是对的呢?我之前都是强行写一行代码改状态,然后再删掉(真的很low😂)。现在我们可以用setValue这个功能来改变变量的值了,和上面的Evaluate改变值类似。

还有有时变量特别多,我们只需要观察某一个变量的值时,可以用Add Watches

Google官网也给我们提供了很多更详细的调试技巧,大家有时间可以看一下。

小编整理了一些关于面试类的文章,含有从基础到进阶。含有BATJ.字节跳动面试专题,算法专题,高端技术专题,混合开发专题,java面试专题,Android,Java小知识,到性能优化.线程.View.OpenCV.NDK等应有尽有。还有辅之相关的视频+学习笔记

话不多请看下图↓↓↓ (把所有的知识+每日一题整理了)

进扣裙回复【333】获取完整资料

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

干货分享:Android Studio 学习之 Debug 调试 的相关文章

  • MFC计算机图形学(1)

    这学期上了计算机图形学 xff0c 用MFC来绘制简单的图形 下面就简单介绍一下用cv 43 43 来绘制图形 VC 43 43 安装 VC 43 43 我基本不用的 xff0c 平时写C C 43 43 的代码都用Code Blocks
  • MFC计算机图形学(2)

    这里呢 xff0c 先把上一讲的联系讲一下 一般人都用是一个一个的去画 xff0c 但是那样好麻烦 xff0c 计算机的有点就是容易处理重复的事情 xff0c 那就定义成一个画正方形函数吧 xff0c 每次调用就可以了 怎么自定义函数呢 x
  • MFC计算机图形学(3)

    之前我们已经可以画出直线和曲线了 但是算法虽容易理解 xff0c 但是复杂度高 xff0c 今天就介绍比较流行的DDA画线法 xff0c 还有 xff0c 对鼠标进行事件有所响应 xff0c 即 xff0c 在画板上 xff0c 鼠标左键单
  • CentOS7手工安装远程图形化程序

    CentOS7手工安装远程图形化程序 xff08 X11Forwarding xff09 用途 tomcat服务部署在linux服务器 xff0c 需要使用jconsle或jvisualvm检查web服务状态 xff1b 但是使用xterm
  • aosp/ota/incremental update package/安卓 7aosp代码增量升级包

    make otapackage out target product aosp aosp ota eng lake zip 61 61 61 gt full update NOT used for incremental package B
  • Matplotlib系列(七):动画

    Matplotlib系列目录 文章目录 一 简介二 思维导图三 Matplotlib动画及图形修改操作1 手写代码更新图形实现动画2 animation模块动画2 1 Animation类简介2 2 FuncAnimation动画2 3 A
  • 01-Docker实战,搭建NodeJs环境

    目的 实现简单的docker的nodejs容器 xff0c 使用Dockerfile构建我们的使用nodejs开发的系统 技术栈 DockerNodejsExpressLinux step1 下拉nodejs基础容器 node 本次我需要使
  • 【Cocos2d-X-2.1.4游戏引擎】发布第一个游戏

    有一段时间没更新博客了 xff0c 最近一直在写一个小游戏 xff0c 游戏在今天终于搞好了 xff0c 又可以开始写写博客 xff0c 打打dota的悠闲的日子了哈 看了十几天cocos2d x后 xff0c 也依照官网的例子写了个打飞机
  • 游戏升级之路

    七十一雾央原创 转载请注明 http blog csdn net hust xy 楼主学习编程有两年了 xff0c 决定向游戏发展大概就是半年前了 xff0c 在这里总结一下游戏方面的学习经历过 xff0c 给初学的朋友们参考下 xff0c
  • vs2017下linux远程调试经验

    调了半天 xff0c 终于进入gdb断点调试了 xff0c 下面分享下经验 xff1a 1 vs2017建立工程 xff0c 出现gdb server找不到 xff0c 解决方法 xff1a http blog csdn net hutia
  • Android Studio 3.6新功能ViewBinding解析

    Android Studio使用技巧 看这一篇就够了 Google官方在2020年3月份发布了Android Studio3 6的版本 xff0c 此版本增加了很多新的功能 xff0c 其中一大亮点功能就是ViewBinding ViewB
  • VBoxManage 命令详解

    查看当前虚拟机 VBxoManage list vms 查看当前正在运行的虚拟机 VBoxManage list runningvms 启动虚拟机 VBoxManage startvm 虚拟机名 无前端图形界面方式启动虚拟机 VBoxMan
  • [Errno 256] No more mirrors to try.解决过程

    今天在Linux服务器上安装rdesktop安装包的时候遇到该报错 xff0c 如图所示 xff1a df h查看挂载盘信息 xff0c 发现光驱未挂载 我设置的挂载光驱路径为 media cdrom 解决过程 xff1a 1 挂载光驱 m
  • c# 简单调用rabbitmq

    如果小伙伴们还没有安装rabbitmq xff0c 可以参考下面链接 https www cnblogs com kiba p 11703073 html 如果想要快速获取整个rabbitmq安装包 xff0c 就关注本人公众号 墨水直达
  • 如何学习一门编程语言,从入门到不放弃!

    在学习前 xff0c 如果能把以下几个方面的问题弄清楚 xff0c 就能够比较顺利和高效的学习 xff0c 拿到你所想要的目标 而不是从入门到放弃 一 方向和目标 首先要确定为什么要学习计算机编程语言 xff0c 为考试 xff1f 为工作
  • 一年精通,三年熟悉,五年了解,十年用过!C++真的这么难吗?

    C 43 43 有句俗话说 xff1a 一年精通 三年熟悉 五年了解 十年用过 如果可以把C 43 43 程序员分层的话 xff0c 看看你在第几层 xff1f 第0层 掌握基本的C 43 43 语法 xff0c 会写一些基本的if els
  • 2023年最新manim系列教程【持续更新中】

    2023年最新Manim系列教程 将持续更新 xff1a 教程更新过程中 xff0c 依旧会对于已发布内容进行更新维护 xff0c 包括但不限于纠错 xff0c 将官网公布的过时功能更新到新版等 个人博客官网 xff1a https mar
  • eclipse代码补齐快捷键失效问题

    1 xff1a 在Window preference general下面的keys中 xff0c 把content asist这个改成alt 43 2 xff1a 在下面 xff0c 有一个when xff0c 选择editing text
  • Ubuntu 界面卡死的办法

  • idea toggle offline mode

    toggle offline mode 切换脱机模式 当点击这个按钮 xff0c 就会进入脱机模式 当您切换到脱机模式时 xff0c maven必须使用本地的资源 xff0c 比如依赖 xff08 只会本地仓库找 xff0c 不会网上去下载

随机推荐