程序调控和监视(Logcat,Debug)

1.Logcat

2.效果图:实现点击Button,提示Logcat信息

(1)activity_main.xml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent"
 6     android:paddingBottom="@dimen/activity_vertical_margin"
 7     android:paddingLeft="@dimen/activity_horizontal_margin"
 8     android:paddingRight="@dimen/activity_horizontal_margin"
 9     android:paddingTop="@dimen/activity_vertical_margin"
10     tools:context="com.example.administrator.hello5.MainActivity"
11     android:orientation="vertical">
12 
13     <Button
14         android:id="@+id/bt"
15         android:layout_width="wrap_content"
16         android:layout_height="wrap_content"
17         android:text="Button" />
18 </LinearLayout>

(2)MainActivity.java

 1 package com.example.administrator.hello5;
 2 
 3 import android.support.v7.app.AppCompatActivity;
 4 import android.os.Bundle;
 5 import android.util.Log;
 6 import android.view.View;
 7 import android.widget.Button;
 8 
 9 public class MainActivity extends AppCompatActivity {
10     private Button button;
11     private static final  String TAG="Locat";
12 
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17         button=(Button)findViewById(R.id.bt);
18         button.setOnClickListener(new View.OnClickListener() {
19             @Override
20             public void onClick(View v) {
21                 Log.v("tag","详细信息");
22                 Log.d(TAG,"调试信息");
23                 Log.i(TAG,"通告信息");
24                 Log.w(TAG,"警告信息");
25                 Log.e(TAG,"错误信息");
26 
27             }
28         });
29 
30 
31 
32     }
33 }

(3)设置过滤器:

2.Debug调试

 

 

打开debug调试 :

小瓢虫

设置断点

双击

Debug调试

Android Studio目前已经成为开发Android的主要工具,用熟了可谓相当顺手。作为开发者,调试并发现bug,进而解决,可是我们的看家本领。正所谓,工欲善其事必先利其器,和其他开发工具一样,如Eclipse、Idea,Android Studio也为我们提供了强大的调试技巧,今天我们就来看看Android Studio中有关调试的技巧。

首先,来看看Android studio中为我们提供的调试面板(标准情况下): 

 

点击右上角Restore ‘Threads’View可先展示目前相关的线程信息: 

android studio大体为我们提供了7个功能区:

  1. 单步调试区
  2. 断点管理区
  3. 求值表达式
  4. 线程帧栈区
  5. 对象变量区
  6. 变量观察区

 

 

下面我们对单步调试区进行介绍。

单步调试区

该区提供了调试的主要操作,和你所熟知的一样的,主要有:Step over、step into、force step into、step out、drop frame。

Show Execution Point

点击该按钮,光标将定位到当前正在调试的位置.

Step Over

单步跳过,点击该按钮将导致程序向下执行一行。如果当前行是一个方法调用,此行调用的方法被执行完毕后再到下一行。比如当前代码是:

 

如果当前调试的是第二行,当点击step over时,Math.min(num,100)方法先执行完后跳到第三行.

Step Into

单步跳入,执行该操作将导致程序向下执行一行。如果该行有自定义的方法,则进入该方法内部继续执行,需要注意如果是类库中的方法,则不会进入方法内部。

Force Step Into

强制单步跳入,和step into功能类似,主要区别在于:如果当前行有任何方法,则不管该方法是我们自行定义还是类库提供的,都能跳入到方法内部继续执行

Drop Frame

中断执行,并返回到方法执行的初始点,在这个过程中该方法对应的栈帧会从栈中移除.换言之,如果该方法是被调用的,则返回到当前方法被调用处,并且所有上下文变量的值也恢复到该方法未执行时的状态。

Force Run to Cursor (//注意执行到init()的时候使用

非常好用的一个功能,可以忽视已经存在的断点,跳转到光标所在处.举个简单例子说明下: 


 
比如现在第10行,此时我想调试18行而又不想一步一步调试,能不能一次到位呢?我们只需要将光标定位到相应的位置,然后执行Force Run to Cursor即可: 

Evaluate expression

点击该按钮会在当前调试的语句处嵌入一个交互式解释器,在该解释器中,你可以执行任何你想要执行的表达式进行求值操作。比如,我们在调试时执行到以下代码

此时执行Evaluate Expression,就相当于在调试行之前嵌入了一个交互式解释器,那么在该解释器中我们能做什么呢?在这里,我们可以对result进行求值操作:对着你想要求值得位置点击鼠标右键,选择evaluate Expression.此时会显示如下: 

在弹出的输入框中输入求值表达式,比如这里我们输入Math.min(result,50),如下图 

点击执行,我们发现在Result中已经输出了结果,如下: 


断点管理区

Return

点击该按钮会停止目前的应用,并且重新启动.换言之,就是你想要重新调试时,可以使用该操作,嗯,就是重新来过的意思.

Pause Program

点击该按钮将暂停应用的执行.如果想要恢复则可以使用下面提到的Resume Program.

Resume Program

该操作有恢复应用的含义,但是却有两种行为: 
1. 在应用处在暂停状态下,点击该按钮将恢复应用运行. 
2. 在很多情况下,我们会设置多个断点以便调试。在某些情况下,我们需要从当前断点移动到下一个断点处,两个断点之间的代码自动被执行,这样我们就不需要一步一步调试到下一个断点了,省时又省力。举例说明:

 

假设我们分别在第2行和第4行添加了断点。如果此时我们调试在第2行,此时点击执行该操作,当前调试位置会自动执行到第4行,也就是第2到第4行之间的代码会自动被执行。

Stop

点击该按钮会通过相关的关闭脚本来终止当前进程.换言之,对不同类型的工程可能有不同的停止行为,比如:对普通的Java项目,点击该按钮意味着退出调试模式,但是应用还会执行完成.而在Android项目中,点击该按钮,则意味这app结束运行.

这里我们以一个普通的JAVA工程为例: 

此时如果我们执行停止操作,发现程序退出调试模式,并正常执行完毕,Console中结果如下: 

View Breakpoints

点击该按钮会进入断点管理界面,在这里你可以查看所有断点,管理或者配置断点的行为,如:删除,修改属性信息等:

 

Mute Breakpoints

使用该按钮来切换断点的状态:启动或者禁用.在调试过程中,你可以禁用暂时禁用所有的断点,已实现应用正常的运行.该功能非常有用,比如当你在调试过程中,突然不想让断点干扰你所关心的流程时,可以临时禁用断点.

Get thread dump

获取线程Dump,点击该按钮将进入线程Dump界面: 

 

 

原文地址:https://www.cnblogs.com/sunxiaoyan/p/9012894.html