Android Studio 实用调试技巧

Android Studio 是个发工具,其自身带调式环境是很强大的,我们要摆脱只会使用Log打印日志的低效的方法,掌握高级调试技巧对每个Android开发者都是很必要的,废话少说,直入正题
调试方式:通过下面方法进入调试
运行调试:点击齿轮运行按钮,IDE出现调试窗口;
附加进程: 如果App正在运行,点击“虫子”图标选择要调试的App进程即可;

成功操作后出现下面的DEBUG悬浮栏,下一步就可以开始设置断点

开始调试:
在代码行鼠标点击左键就可以了,程序就能自动运行到断点;

步进方式:是调试的核心和精华,掌握好很容易能获得想要的数据,打开Run菜单我们看到丰富的步进方式(快捷方式根据方案和配置可以自由设定)

Step Into:单步前进,如果断点包含子方法则进入方法(不会进入官方类库的方法);
Force Step Into:在 Step Into 的基础上能进入任何方法;
Smart Step Into:语句包含两个或者以上方法链式调用,可以选择进入那个方法,包括匿名内部类,尼姆达表达式也可以;

Step Out :单步前进,如果已在子方法里面则跳出;
Step Over :单步前进,不进入子方法;
Drop Frame: 点击该按钮后,你将返回到当前方法的调用处重新执行,并且所有上下文变量的值也回到那个时候。只要调用链中还有上级方法,可以跳到其中的任何一个方法;
Resume Program: 继续执行;
Force Run to Cursor: 顾名思义,就是直接跳到光标所在位置,这个非常方便调试所需要的语句;

说完步进,现在说说断点;
条件断点:在断点的位置设置条件,那只有符合条件的情况下才停下来,例如调试一个for循环的时候有几百次循环但是想看到某个次数时候则相当方便;

方法断点:在方法开头设置,断点标识红色四黑点的标识;

日志断点:鼠标右键断点,然后去掉Suspend,在log evaluated expression输入要打印的表达式:”setValue=”+getValue(),然后运行程序;

看控制台我们能发现断点日志:

选log message to console后发现日志信息也被打印出来

异常断点:异常的时候触发的断点:1、点击断点管理,然后新增一个异常断点;

设置一个能产生异常的方法并执行它,就会发现异常会在这里停掉;


临时断点:断点停下之后,就会被移除,调试过程中只会断掉一次,按 ATL+鼠标左键 就可以出现

失效断点:暂时让断点失效,无需把它删除;方法:ALT+鼠标左键 在断点上点击
观察调试:
当断点命中后,我们当然就是要观察并获取结果
观察变量:在断点停留时候,在变量上 ALT+鼠标左键 点击就可以看到断点的所有信息;

改变变量值:例如执行方法原来的值:

在Variables窗口右键鼠标修改就可以改变值了:


添加到观察窗口:如果多个标量或者多个表达式在多个不同的地方,要上下观察是很麻烦的,我们可以把它Add to Watchs, 然后在观察窗口就可以一次看到多个变量值;

计算表达式:计算这个变量的值,result运行到中间查看变量值就出现这样的情况

计算方法调用结果: 输入方法getValue(), 点击执行,就可以得到这个方法的结果;

代码片段模式:这个可以运行一段代码得到结果而非一个表达式:

例如我们修改这个变量的值的片段:

标记object;选择变量右键出现Mark Object菜单,点击后输入标签就可以了:


至此大致内容完毕,关于调试的技巧,总的来说一个是断点设定,一个是步进方法的掌握,希望大家多实践,有任何问题欢迎写信给我或者留言。最后,基础很简单,但很重要,不要看不起,走好每一步才能走得更远。
欢迎访问我的主页:tinyx.cc 或关注我的公众号:

Android Studio 实用调试技巧的更多相关文章
- (转载) Android Studio你不知道的调试技巧
Android Studio你不知道的调试技巧 标签: android studio 2015-12-29 16:05 2514人阅读 评论(0) 收藏 举报 分类: android(74) ...
- Android Studio & eclipse 调试技巧
如上图设置多个断点,开启调试.想跨断点移动到下一个断点,点击如下图1箭头,程序将运行一个断点到下一个断点之间需要执行的代码.如果后面代码没有断点,再次点击该按钮将会执行完程序.点击箭头2指向的按钮,可 ...
- Android Studio你不知道的调试技巧
写代码不可避免有Bug,通常情况下除了日志最直接的调试手段就是debug:那么你的调试技术停留在哪一阶段呢?仅仅是下个断点单步执行吗?或者你知道 Evaluate Expression, 知道条件断点 ...
- 转: Android Studio你不知道的调试技巧
http://tianweishu.com/2015/12/21/android-studio-debug-tips-you-may-not-know/
- Android Studio 使用小技巧和快捷键
Android Studio 使用小技巧和快捷键 Alt+回车 导入包,自己主动修正 Ctrl+N 查找类 Ctrl+Shift+N 查找文件 Ctrl+Alt+L 格式化代码 Ctrl+Alt ...
- 最强 Android Studio 使用小技巧和快捷键
写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android Studio 使用小技巧和快捷键. 根据这些小技巧的使用场景,本 ...
- Android Studio实用快捷键汇总
以下是平时在Windwos系统上用Android Studio进行开发时常用到的一些快捷键,虽然不多,但是感觉都还蛮实用的,因此记录下来,如果什么时候不小心忘记了可以拿来翻一翻,That would ...
- 最强 Android Studio 使用小技巧和快捷键总结
最强 Android Studio 使用小技巧和快捷键总结 写在前面 本文翻译自 Android Studio Tips by Philippe Breault,一共收集了62个 Android ...
- Android Studio 动态调试 apk 反编译出的 smali 代码
在信安大赛的准备过程中,主要通过 Android Studio 动态调试 apk 反编译出来的 smali 代码的方式来对我们分析的执行流程进行验证.该技巧的主要流程在此记录.以下过程使用 Andro ...
随机推荐
- 用VS Code体验调试.NET Core 2.0 Preview (传统三层架构)
准备工作 VS Code下载地址:https://vscode.cdn.azure.cn/stable/379d2efb5539b09112c793d3d9a413017d736f89/VSCodeS ...
- 小解系列-解决WebUploader在谷歌浏览器下弹出框打开慢,在Bootstrap模态框内部多次点击才能触发的问题
WebUploader百度前端团队开源的上传组件,用起来感觉真心不错的,标题的两个问题是我实际使用过程中遇到的问题,经过百度和谷歌查到解决方案, 特分享一下,以供遇到此问题的童靴. 谷歌浏览器弹出框打 ...
- JavaScript一个猜数字游戏
效果图: 代码: <body> <script type="text/javascript"> window.onload = newgame; //页面载 ...
- js获取客户端MAC地址
最近遇到一个需求,医院要求呼叫中心账号必须对应MAC地址,也就是说该MAC地址必须和呼叫中心账号对应才可使用,这可就难道我了,这需求就要求每次都判断用户登录的电脑MAC地址是否有呼叫中心账号,当然只针 ...
- php使用flock阻塞写入文件和非阻塞写入文件的实例讲解
php使用flock阻塞写入文件和非阻塞写入文件的实例讲解: 阻塞写入代码:(所有程序会等待上次程序执行结束才会执行,30秒会超时) <?php $file = fopen("test ...
- C++第二篇--访问控制
C++第二篇--访问控制 1. 引入 上一篇博文中从结构体引到了类,类当中不仅有数据成员还有一些函数,这些函数被称为成员函数.今天介绍新的内容,类当中的访问控制. 2. 访问控制 当你不添加任何声明, ...
- 【NOI复习】树链剖分
简介 树链剖分通常用来解决一类维护静态树上路径信息的问题, 例如:给定一棵点带权树, 接下来每次操作会修改某条路径上所有点的权值(修改为同一个值或是同加上一个值等) , 以及询问某条路径上所有点的权值 ...
- 平方根的C语言实现(一)
曾经做一个硬件成本极度控制的项目,因为硬件成本极低,并且还需要实现较高的精度测量,过程中也自己用C语言实现了正弦.余弦.反正切.平方根等函数. 以下,无论是在我的实际项目中还是本地的计算机系统,int ...
- android调用系统相机进行视频录制并保存到指定目录
最近在做视频录制上传,调用的是系统的相机. 在做之前查了一些资料,发现好多人遇到保存到指定目录不成功的现象.自己写的时候就注意这些,最后发现他们遇到的问题我这边根本没有.可能是他们写法有问题吧. 下边 ...
- 踩坑之路_"var name = ' ';"_迷之BUG
情景介绍:最近写一个拖拽生成图表的工具,自己的思路每次mousedown的时候动态将this的name属性值赋值给全局中变量(自己手贱测试时直接将变量名命名为了'name',一大波bug还有30s到达 ...