2021-08-30

2023-11-08

Android Studio 你需要掌握的Debug技巧(上)

对所有程序猿来说,写代码最让人头疼的不是某个难以实现的功能,而是辛辛苦苦码完代码却发现自己的程序里面存在着这样或那样的Bug。尤其是碰到那种让你绞尽脑汁,修改了无数次都解决不了的Bug。我相信,很多朋友都会有这样的经历。对于开发者来说,几个小的Bug也许看上去问题不大,可如果不及时解决,一旦积累起来,轻则会影响用户体验,重则可能会使整个系统崩溃!
所以,这一次,我决定以Android Studio为例,简单地总结一下Android开发当中可能会用的的调试技巧。

最基本的调试技巧
千万不要觉得那些简单的基本的东西不重要。事实证明,这些技巧往往是我们平时使用最为频繁的,所以,先从这些讲起。

1.设置断点
(图1)
选定要设置断点的代码行,在行号的区域后面单击鼠标左键即可。

2.Debug模式启动APP(Shift+F9)
点击红色箭头所指向的虫子图标,Debug模式启动APP。
(图2.1)

APP启动后,运行至第一处断点处会停下来,同时IDE下方出现Debug视图,红色的箭头指向的是现在调试程序停留的代码行,方法Add()中,程序的第20行。红色箭头悬停的区域是程序的方法调用栈区。在这个区域中显示了程序执行到断点处所调用过的所用方法,越下面的方法被调用的越早。
同时也能看到,设置断点的代码行变量i处在监控之中,此时,i = 0。

(图2.2)

3.单步调试
3.1 step over(F8)
点击红色箭头指向的step over按钮(图中我们按了两次让 i =1,看的明显一些),程序向下执行一行(如果当前行有方法调用,这个方法将被执行完毕返回,然后到下一行。就是说不会进入到调用的其他方法中去)。
(图3.1)

3.2 step into(F7)
点击红色箭头指向的step into按钮,程序向下执行一行。跟step over不同的是:如果该行有方法调用且为自定义方法,则运行进入自定义方法(不会进入官方类库的方法)。
(图3.2.1)

点击以后,进入到Add()方法之中。

(图3.2.2)

step into按钮右边的 Force step into按钮(Alt+Shift+F7)可以进入包括官方类库在内的任何方法。

3.3 step out(Shift+F8)
如果在调试的时候你进入了一个方法(如Add()),并觉得该方法没有问题,你就可以使用step out跳出该方法,返回到该方法被调用处的下一行语句。值得注意的是,该方法已执行完毕。
(图3.3.1)

没有问题,点击step out按钮,跳出该方法,该方法执行完毕。
(图3.3.2)

这个Drop frame暂时还没有搞清楚怎么用,等以后补充。。。

3.4 run to Cursor(Alt+F9)
(图3.4.1)
设置多个断点时,可利用 run to Cursor按钮在两个断点之间跳转。
(图3.4.2)
其实Resume Program也是这个功能,它们有什么不同还不清楚。。。

3.5 Watches
如果某个类或方法中变量太多,在Variables面板里观察的话会很费劲,这时就会需要用到Watches这个工具了。
点击Watches下方的+号,然后手动输入变量的名称回车就OK了。
(图3.5.1)

也可以选择Variables中的变量名然后点击右键,选择Add to Watches,然后Watches面板中就有了。
(图3.5.2)
还能看到SetValue选项,可以手动更改某个变量的值,有时候会很有用。

3.6 View BreakPoints(Ctrl+Shift+F8)
(图3.6.1)

点击箭头指向的按钮,会弹出一个窗口,如下图。

(图3.6.2)

在这里可以查看设置过的所有断点(箭头所指)。另外,还可以在这里设置条件断点,日志断点,异常断点等,这些高级技巧我们将在本系列的下篇文章里介绍,敬请期待!

等等!先别着急翻页,本期还有最后一个压轴的技术点要分享给大家。
想象一下下面的场景:你的APK如果已经运行在普通模式(非Debug)的情况下,你突然想Debug,而又不想重新运行浪费时间,该怎么办呢?
普通模式下想设置断点进行调试可不可以呢?
当然是可以的,不仅可以,这种方式已经渐渐替代了原先的方案,毕竟很方便,不是吗?那具体要怎么做呢?

4 attach process
(图4.1)

正常运行APK
(图4.2)

运行起来之后,设置断点
(图4.3)

运行Run->Attach debugger to Android process
(图4.4)

attach process到指定进程,条件触发之后就可以直接进入调试模式。之后该怎么做不用我再说了吧?

参考文章:
http://www.2cto.com/kf/201506/408358.html
http://www.cnblogs.com/firstcsharp/p/4333264.html
————————————————
版权声明:本文为CSDN博主「Yaoobs」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yaoobs/article/details/51296198

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

2021-08-30 的相关文章

随机推荐

  • Redis集群方案及实现

    之前做了一个Redis的集群方案 跑了小半年 线上运行的很稳定 差不多可以跟大家分享下经验 前面写了一篇文章 数据在线服务的一些探索经验 可以做为背景阅读 应用 我们的Redis集群主要承担了以下服务 1 实时推荐 2 用户画像 3 诚信分
  • 扩展欧几里得算法求特解以及通解

    扩展欧几里得算法 裴蜀定理 百度百科上的解释 裴蜀定理 或贝祖定理 得名于法国数学家艾蒂安 裴蜀 说明了对任何整数a b和它们的最大公约数d 关于未知数x和y的线性不定方程 称为裴蜀等式 若a b是整数 且gcd a b d 那么对于任意的
  • 软件测试报告包含哪些内容?

    软件测试报告一般包含以下内容 1 引言 目的 背景 缩略语 参考文献 2 测试概述 测试目的 项目介绍 测试目标 3 测试资源 测试人员 测试软硬件环境及配置 测试环境的网络拓扑 4 测试参考资料 在测试过程中所参考的文献资料等 5 测试进
  • moviepy简介及安装

    专栏 Python基础教程目录 专栏 使用PyQt开发图形界面Python应用 专栏 PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一 概述 MoviePy是一个用于视频编辑的Python模块 可用于进行视频的基本操作 如
  • 特征工程(补充)--特征组合

    特征组合变化也属于特征选择的一种手段 这部分工作可发挥的空间就看你的想像力和经验了 这里的组合变化远不限于把已有的特征加减乘除 比如Kernel Tricks之类 举个比较有想像力的例子 现在市面上社交网络里面 你可能认识的人 的推荐算法几
  • 用通俗易懂的方式讲解大模型分布式训练并行技术:概述

    近年来 随着Transformer MOE架构的提出 使得深度学习模型轻松突破上万亿规模参数 传统的单机单卡模式已经无法满足超大模型进行训练的要求 因此 我们需要基于单机多卡 甚至是多机多卡进行分布式大模型的训练 而利用AI集群 使深度学习
  • linux配置sonarqube遇到的坑

    1 9000端口开了 sonar配置的9000端口 但是连接失败 sonar localhost linux x86 64 curl http localhost 9000 curl 7 Failed connect to localhos
  • Python记4(NumPy计算库

    目录 1 安装NumPy库 2 数组属性 3 创建数组 array 列表 或者array 元组 3 1 多维数组 3 2 数据类型 3 3 创建特殊的数组 3 4 asarray 将列表或元组转化为数组对象 3 5改变数组形状 reshap
  • c++ static修饰变量、函数、对象、数组

    文章目录 static相关语法 一 static 修饰变量 修饰局部变量 修饰全局变量 修饰类中变量 内存初始化时机 二 static修饰函数 修饰普通函数 全局静态函数 修饰类中的函数 静态成员函数 三 static修饰类对象 stati
  • CSS解决高度自适应问题

    高度自适应问题 我很抵触用js去解决 因为不好维护 也不够自然 但是纯用CSS 难度不小 比如下面我要说的例子 需求 1 这个矩形的高度和浏览器窗口的高度相同 不能出现纵向滚动条 2 绿色部分高度固定 比如50px 3 紫色部分填充剩余的高
  • 32位/64位WINDOWS驱动之保护特定名字进程【蓝屏修复】

    32位 64位WINDOWS驱动之保护特定名字进程 蓝屏修复 1 驱动层 进程保护 c 在const char PsGetProcessImageFileName PEPROCESS arg1 下添加 功能 进程ID 进程名称 const
  • Nginx 反向代理 proxy_pass 规则配置

    Nginx 其中一个作用是反向代理 有的时候 需要将某个请求转发到另外的地址做其他用途 基于某些原因 原请求地址 可能是比较长的 具体的请求地址 且不方便修改 因此需要在 proxy pass 中配置规则 用以满足条件 转发 Nginx p
  • IPtables之一:基本概念介绍

    原文地址 http www 2cto com Article 201207 142771 html 防火墙按照实现方法可以分为软件防火墙和硬件防火墙 纯硬件防火墙是很少的 一般见到的防火墙设备都是依靠软件搭配实现 按照功能可以将防火墙分为包
  • 办公技能(PPT、Word、Excel、Access、superset、pyecharts)

    一 superset学习 https blog csdn net seek97 article details 109552886 spm 1001 2014 3001 5501 二 pyecharts https gallery pyec
  • CNDS博客等级

    CNDS博客积分规则 博客积分是CSDN对用户努力的认可和奖励 也是衡量博客水平的重要标准 博客等级也将由博客积分唯一决定 积分规则具体如下 1 每发布一篇原创或者翻译文章 可获得10分 2 每发布一篇转载文章 可获得2分 3 博主的文章每
  • 【2019年ICPC南昌网络赛】Distance on the tree【DFS+线段树合并(可持久化线段树)】

    题目链接 DSM Data Structure Master once learned about tree when he was preparing for NOIP National Olympiad in Informatics i
  • 动态标题_工作技巧

    本期重点 使用HASONEVALUE判断列中是否只有一个值被筛选 从而根据实际筛选的值实现动态变化 日常工作中我们经常会使用切片器来实现分析报告的动态变化 可是标题应该怎么随着数据变化呢 今天我们就来学一招 动态切换标题 01数据准备 首先
  • 你知道怎么离线安装全局 node 模块吗?

    大家平时是怎么离线安装 node 模块的呢 前言 在平时的开发中 我们一般都是通过在线安装的方式来安装 node 模块的 但是也保不齐会有离线安装的需求 比如 公司内网是不联网的 那如果需要安装模块的话怎么办 今天 我就通过离线安装全局 a
  • ADS1.2使用jlink调试程序(调试芯片s3c2440 arm9)

    一 软件安装 ADS1 2下载 http down drv5 cn www drv5 cn arm ads1 2 rar jlink驱动下载 http fastsoft onlinedown net down JLink Windows V
  • 2021-08-30

    Android Studio 你需要掌握的Debug技巧 上 对所有程序猿来说 写代码最让人头疼的不是某个难以实现的功能 而是辛辛苦苦码完代码却发现自己的程序里面存在着这样或那样的Bug 尤其是碰到那种让你绞尽脑汁 修改了无数次都解决不了的