java 安卓调试,Android Studio(二十一):调试你的应用

Android Studio包含了一个调试器,允许你调试运行在Android虚拟机或连接的Android设备的应用。通过Android Studio的调试器,你可以:

1、 选择你调试设备的app

2、 为你的代码设置断点

3、 在运行时检测变量和表达式

4、 截图和录像

通过点击工具栏中的Debug按钮来开始调试,Android Studio生成一个APK,并且使用调试key进行签名,安装到选定的设备中运行并打开调试Debug窗口。

如果点击Debug后,在Select Deployment Target窗口没有出现任何设备,你需要连接一台设备或者创建一个虚拟机。

115d1d0d2293e5130730dd434ff137e5.png

如果你的app已经运行在一个连接的设备或虚拟机中,你可以通过如下方式开始运行:

1、 点击Attach debugger to Android process

2、 在Choose Process 对话框,选择进程。

3、 点击OK

Debug窗口出现。

f776d211a21cbbb4700b398d7bdd0313.png

4、 点击Terminate结束调试。

使用系统日志

系统日志显示了你调试app时的系统信息。这些消息包含你app运行在设备中的信息。如果你想用系统日志来调试你的app,确保你写了打印日志的相关代码。

在你的代码中打印日志消息

在你的代码中打印日志消息,使用Log类。如下:

Java代码importandroid.util.Log;

...

publicclassMyActivityextendsActivity {

privatestaticfinalString TAG = MyActivity.class.getSimpleName();

...

@Override

publicvoidonCreate(Bundle savedInstanceState) {

if(savedInstanceState !=null) {

Log.d(TAG, "onCreate() Restoring previous state");

/* restore state */

} else{

Log.d(TAG, "onCreate() No saved state available");

/* initialize app */

}

}

}

在开发过程中,你可以捕获异常并打印stack trace到系统日志:

Java代码voidsomeOtherMethod() {

try{

...

} catch(SomeException e) {

Log.d(TAG, "someOtherMethod()", e);

}

}

查看系统日志

在Android DDMS工具窗口中查看系统日志:

1、 在调试模式启动你的APP

2、 点击Android Monitor

3、 如果在Logcat视图中系统日志是空的,点击Restart。

Android DDMS工具窗口给你从Android Studio中访问DDMS某些特性的权限。

系统日志显示来自Android服务和其他Android应用的消息。通过以下方式进行过滤:

1、 显示特定进程的日志消息,在Devices视图中选择相应进程,然后点击Click Show Logcat from Selected Process。如果你的Devices视图没出点,点击Android DDMS工具窗口右边的Restore Devices View,这个按钮仅仅在你隐藏了Devices窗口时才可用。

2、 也可以根据log level来过滤

3、 也可以在输入框中输入特定的字符串,点击回车。

断点

Android Studio支持多种不同的断点来触发不同的调试动作。最常用的是行断点,应用在特定的行停止。暂停时,你可以检查变量,表达式,也可以单步执行来确定运行错误的原因。

添加一个行断点,可以按照以下方式:

1、 找到你需要执行到暂停的行,点击代码编辑器的左边,或者将光标移动到指定的行,店家Ctrl+F8。

2、 如果你的应用已经运行,直接单击Attach debugger to Android process。

6b69d85216e011843d05bdc665403129.png

当你的代码执行到断点的位置,Android Studio暂停了你的应用的执行。你可以使用调试器中的工具来查找错误的原因。

查看和配置断点

查看所有的断点和配置断点设置,点击Debug窗口左边的View Breakpoints,如图:

d06adb583eb9b67f2b02ad3f5cee4bbd.png

Breakpoints窗口允许你开启和禁用左边列表的每个断点。如果断点被禁用,Android Studio在到达这个断点时不会停止。

2017年5月31日

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560458.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java将属性练成字符串,Java中通过属性字符串名取属性内容

在Android开发当中资源的获取其实是间接通过R文件进行的,这个R文件就相当于是一个地址列表,存放着每个资源的地址那么如何快速高效的获取就是这篇文章要分析的问题假设我们有一个图片资源叫btn_bg那么将一个按钮背景设置为这个图片的方式就是btn.setBackgroundResource(R.drawa…

AttributeError: module ‘numpy‘ has no attribute ‘int‘.

解决方法 降低numpy版本 numpy 1.22 修改源代码 参考 [1] 【已解决】AttributeError: module ‘numpy‘ has no attribute ‘int‘. [2] AttributeError: module numpy has no attribute int .报错解决方案

Java字段和属性

属性和字段区别: Java中的属性(property),通常可以理解为get和set方法。更形象的说就是:属性是对字段的封装,供外部访问。 而字段(field),通常叫做“类成员”,或 "类成员变量”,有时也叫“…

java我现在不懂看不懂,看都看不懂,难道我与Java无缘吗

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼package VIP;public class Hero {private String name;private int Life;public void hero(String name,int Life){}public String getName() {return name;}public void setName(String name) {this.name name;}public int getLi…

Java反射 Class类

Class类的实例表示正在运行的Java应用程序中的类和接口。它是Java反射的基础,对任何一个类,首先产生一个Class对象,然后才通过class类获得其他的信息。 获取class类对象方式: 通过Object类提供的getClass()方法获得Class类对象。…

php数字从大到小生成,php输入几个数从大到小排序的案例

php输入几个数从大到小排序的案例发布时间:2020-10-28 11:53:20来源:亿速云阅读:66作者:小新php输入几个数从大到小排序的案例?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小…

Java反射 Constructor类

Java反射 Constructor类 Java通过反射可以获取构造方法,和使用构造方法创造对象。 在网上找了一个比较好理解的例子来弄清楚Constructor类。 public Constructor getConstructor()// 公共构造方法对象 public Constructor[] getConstructors()//所有公共构造方法…

mysql hammerdb,[料理佳餚] 用 HammerDB 來執行資料庫 TPC-C 效能量測

TPC-C 模擬的情境TPC-C 模擬的情境是一個大型的商品批發商,擁有若干個倉庫,每個倉庫擁有 100000 件商品庫存、負責為 10 個地區供貨,每個地區服務 3000 名客戶,每名客戶平均一筆訂單有 10 項商品,所有訂單中約 1% 在其…

使用Linux进行c或c++编程

使用Linux进行C或c语言编程 1.创建名为 HelloWorld 的 c 或者 c 文件 vim HelloWorld.c vim Helloworld.cpp2.然后就进入文本编辑界面 输入i,进入编辑模式。写代码。按esc键,进入命令模式,输入:wq保存并退出文本编辑器。然后可以看见对应位…

如何用php写表单中的年月日,php写的日历程序 - adamboy的个人页面 - OSCHINA - 中文开源技术交流社区...

$weekArr array(Sun,Mon,Tue,Wed,Thu,Fri,Sat);//获取空格://echo date("D",strtotime("2012-02-07"));function getSpace($month,$year){global $weekArr;if(!$year){$year date("Y");}$firstDay date("D",strtotime($…

Java反射 field

Java反射 field 获取字节码文件对象 Class c Class.forName(“fieldtest.Student”); 通过无参构造方法创建对象obj Constructor con c.getConstructor(); Object obj con.newInstance(); 通过成员变量名,获取单个的成员变量 Field nameField c.getField("name"…

mysql5.7循环,python3.4用循环往mysql5.7中写数据并输出的实现方法

python3.4用循环往mysql5.7中写数据并输出的实现方法来源:中文源码网 浏览: 次 日期:2018年9月2日python3.4用循环往mysql5.7中写数据并输出的实现方法 如下所示:#!/usr/bin/env python# -*- coding:utf-8 -*-# __author__ …

java反射 Method

java反射 Method 获取字节码文件对象 Class c Class.forName("fieldtest.Student");通过无参构造方法创建对象obj Constructor con c.getConstructor(); Object obj con.newInstance();Method m1 c.getMethod(“study”);获取study方法 m1.invoke(obj);使用obj对…

axure 鼠标变成手,Axure教程|鼠标移入移出自动显示与隐藏三级菜单

前几天因工作需要做一个鼠标移入显示隐藏菜单,鼠标移出自动隐藏菜单,做的时候觉得没有什么问题,做完后预览就发现一个很严重的问题,就是鼠标移出一级菜单向二级菜单时二级菜单不显示,或者二级菜单显示三级菜单不显示。…

java与平台无关的原因

Java字节码 Java源程序(.java)要先编译成与平台无关的字节码文件(.class),然后字节码文件再解释成机器码运行。解释是通过Java虚拟机来执行的。 java要运行要经过如下步骤 ① Java源文件—->编译器(工具)—->…

php websocket应用实例,php使用websocket示例详解

下面我画了一个图演示 client 和 server 之间建立 websocket 连接时握手部分,这个部分在 node 中可以十分轻松的完成,因为 node 提供的 net 模块已经对 socket 套接字做了封装处理,开发者使用的时候只需要考虑数据的交互而不用处理连接的建立…

Java集合 Collection

Jdk提供了一些特殊的类,用来保存数量不确定的对象,存储任意类型对象,长度可变。这些类统称为集合。 集合类位于Java.util包中,按存储结构分为Collection单列集合和Map双列集合。 Collection是单列集合的根接口,有两个…

java basic data type,java基本数据类型--Basic Datatypes

Variables are nothing but reserved memory locations to store values. This means that when you create a variable you reserve some space in the memory.---说的好有道理Based on the data type of a variable, the operating system allocates memory and decides what…

Java final修饰符的作用,Java中的final修饰符

1.什么时候可以选择final修饰符如果想让一个类不被其他类继承,不允许在有子类,这时候就要考虑用到final来修饰。2.用final修饰的类首先大家要明白,用final修饰的类是不能被继承的,下面来看一个错误案例。eg:final clas…

Java基础 HashMap的添加 修改 遍历 Map.Entry Map.entrySet()的使用及实例

Java Map Map中不能包含相同的键,每个键只能映射一个值。 HashMap:并不能保证它的元素的顺序,元素加入散列映射的顺序并不一定是它们被迭代方法读出的顺序。 Map.Entry Map.Entry 是Map中的一个接口,他的用途是表示一个映射项…