Android Studio中debug功能详解
作者:哆啦U梦 发布时间:2022-05-22 08:16:01
本文为大家分享了Android Studio debug功能的具体使用方法,供大家参考,具体内容如下
运行debug模式
1. 进入debug
- 点击图中红色圆圈圈起的左边绿色按钮,运行app的debug模式,快捷键Shift+F9
- 点击图中红色圆圈圈起的右边按钮,可以选择正在运行的进程attach debugger
1. 打断点:鼠标点击编辑框左侧,出现红色圆点
断点分类
这张图可以看出断点也有行断点、方法断点、字段断点、异常断点。其实打断点仔细观察也可以发现它们的标识图片是不同的,就是上图中每行前面的那四种不同的小红点。
行断点: 当执行到此行是停止执行,等待调试。
属性断点:打在类的成员变量上,当变量初始化或变量的值改变时触发断点。当然也可以配合其他用法设置过滤。
方法断点:打在一个函数的首行,进行函数级别的调试,更可以打在JDK的源码里,查看函数调用。普通的断点是不能打在源码里的。
异常断点:当抛出指定异常时触发断点。AS可以在Breakpoints中点击左上角 + 号,选择Java Exception Breakpoints,来指定一个异常。
基本操作
从左到右依次
跳到当前执行的断点处
Step Over 单步执行
Step Into 进入正在执行的方法(必须是自定义的方法)、
Focus Step Into 可以进入源码
Step Out 跳出正在执行的方法
Drop Frame 返回到当前方法的调用处
Run to Cursor 运行到光标处
Evaluate expression 计算选中的变量的值
从上到下依次为:
切换debugger模式
运行至下一断点,(从暂停)恢复程序
暂停程序
关闭调试
查看断点
隐藏断点
查看线程堆栈
高级操作和断点过滤
点击上一张图中的5查看断点可以打开下面的面板,这张面板提供了关于debug的许多高级功能:
条件过滤
右击断点,可以设置condition。如图所示,设置一个变量mJoinVaule.equals(“222”),点击Done。当在mJoinEt这个EditText中输入222时才会触发这个断点。
在BreakPoints面板同样可以设置条件断点。
测试代码
下面是一段测试代码,用来测试后面的功能
package com.jnxy.arithmetic.base;
/**
* Created by admin on 2016/8/5.
*/
public class Person {
int age;
public void out() {
System.out.println("age : " + age);
}
public Person(int age) {
this.age = age;
}
public static void main(String [] args) {
Person p1 = new Person(3);
Person p2 = new Person(5);
Person p3 = new Person(8);
Man man = new Man(10, 10);
Woman woman = new Woman(12, 12);
Person[] persons = new Person[]{p1, p2, p3, man, woman};
for (Person person : persons) {
person.out();
}
}
}
class Man extends Person {
int weight;
public Man(int age, int weight) {
super(age);
this.weight = weight;
}
}
class Woman extends Person{
int height;
public Woman(int age, int height) {
super(age);
this.height = height;
}
}
日志断点
断点打在上方代码第27行,选中代码,同时设置Condition和Log evaluation expression,这样只有person.age==8时断点生效,才会在log打印表达式。当然,也可以值设置Log表达式。控制器输出如下图,可以看到只有age==8时才打印了toString().
实例过滤
继续执行程序,当设置的实例调用方法时断点生效。
类过滤
首先设置Class Filter,内容为要过滤类的完整路径,设置为只有Man类调用方法断点生效,下图age==10,证明确实是Man类调用的方法。
执行次数断点
Pass Count和Condition具有相似之处,但Condition用途应该更广泛一些。
设置变量值
调试过程中,选中一个变量右键可以可以进行Set Value操作,这项强大的功能对需要不同数据进行判断的情况提供了极大地便利。
来源:https://blog.csdn.net/u013952370/article/details/52131007


猜你喜欢
- 本文实例讲述了C#精确计算年龄的方法。分享给大家供大家参考。具体如下:该源码在vs2010测试通过using System;using Sy
- 本文实例为大家分享了unity shader实现光照效果的具体代码,供大家参考,具体内容如下效果图:shader被附给了球。灯光需要在属性面
- 自己定义的栈的接口,完全是按照栈的常用方法以及命名方式实现: 注意以下类,接口都是在一个命名空间下栈的接口:包括了常用的方法namespac
- 本文实例讲述了C#数据结构之队列(Quene)。分享给大家供大家参考,具体如下:队列(Quene)的特征就是“先进先出”,队列把所有操作限制
- 在最近写的一个天气APP中用到了圆形头像这样的一个样式,中间是圆形的头像(被圆形切割的图片),周围是一个带颜色的圆环。如下图所示,今天就来说
- 一:前言最近老师布置了给多级菜单的作业,感觉蛮有意思的,可以提升自己的逻辑!下面我写个简易版的多级菜单,本人还是菜鸟,欢迎各位给予宝贵的建议
- FileStream缓冲读取和写入可以提高性能。FileStream读取文件的时候,是先将流放入内存,经Flush()方法后将内存中(缓冲中
- 1. 将对象转换为JSON字符串,返回值为一个JSON字符串public static String toJson(Object value
- 1.理解装箱简单地说,装箱就是将一个值类型的数据存储在一个引用类型的变量中。假设你一个方法中创建了一个 int 类型的本地变量,你要将这个值
- 先写在前面,这说的Settings加载选项是指Settings这个应用显示在主界面的选项,这个修改需要对系统源码进行修改。Android 7
- 对HDFS上的文件进行上传和下载是对集群的基本操作,在《HADOOP权威指南》一书中,对文件的上传和下载都有代码的实例,但是对如何配置HAD
- 前言windows自带的游戏《扫雷》是陪伴了无数人的经典游戏,本程序参考《扫雷》的规则进行了简化,用java语言实现,采用了swing技术进
- 本文为大家分享了Android中Drawable方法的详细使用方法,供大家参考,具体内容如下1. BitmapDrawable相关方法:新建
- 问题现象描述:在Activity中控制播放时,按返回键退出应用后,音乐可在后台继续播放。重新进入app,音乐无法停止,重新点击开始播放音乐,
- Java2在1.4中新增了一个关键字:assert。在程序开发过程中使用它创建一个断言(assertion)。,它的语法形式有如下所示的两种
- 本文实例为大家分享了Java实现超市会员管理系统的具体代码,供大家参考,具体内容如下要求:借助集合框架及实用类实现该系统1、积分累计2、积分
- 1.背景在项目中有些敏感信息不能直接展示,比如客户手机号、身份证、车牌号等信息,展示时均需要进行数据脱敏,防止泄露客户隐私。脱敏即是对数据的
- 本文实例讲述了C#计算程序执行过程花费时间的方法。分享给大家供大家参考。具体如下:计算执行完程序花费的时间:void AddInfo(){
- 前面两篇文章,分别简述了多线程的使用和发展历程,但是使用多线程无法避免的一个问题就是多线程安全。那什么是多线程安全?如何解决多线程安全?本文
- 问题用过storm或者jstorm的都知道,如果在bolt代码中发生了没被catch住的异常,所在worker进程会退出。本文就从源码角度分