昨天同事问我一些有关断点的问题,于是新开个系列讲讲Android中调试那些事。这些属于应用的范畴,网上很少有详细的说明,这里也不可能面面俱到,尽量用比较友好地方式去写

Debug your app! 讲讲Android Studio の Debug调试那些事(一)
Debug your app! 讲讲Android Studio の Debug调试那些事(二)

调试应用

Android Studio 提供了一个调试程序,用来执行以下操作以及更多操作:

  • 选择要在哪个设备上调试应用。
  • 在 Java、Kotlin 和 C/C++ 代码中设置断点。
  • 在运行时检查变量和对表达式求值。

准备工作

  • 启用USB调试
    如果使用的是IDE自带模拟器,默认会开启。如果在真机,需要去 开发者模式-USB调试 开启
  • 运行可调试的构建变体
    在build.gradle中将debuggable true添加进去,一般默认生成。
    android {
        buildTypes {
            customDebugType {
                debuggable true
                ...
            }
        }
    }

开始调试

  1. 打断点 断点怎么打,回头再说 已更:
  2. 选择调试,图中依次为选择要调试的APP、选择调试设备、开始调试
  3. 点击调试,就那个小虫子(bug)图标
  4. 此时会弹出debug工具视图,如果未打开,手动去上方工具栏View - Tool Windows - Debug或者直接Alt + 5
    (我改了界面MD图标,可能和你原生看到的不太一样,没关系,每个按钮是干啥的我也不准备讲,鼠标放上去就有解释,就字面意思没啥人对这个有问题 吧。。)

将调试程序连接到正在运行的应用

如果应用已在设备上运行,则无需重启应用即可开始调试,具体操作步骤如下:

  1. 点击工具栏Attach debugger to Android process按钮,图标原生是小虫子加箭头,MD图标是个插头
  2. Choose Process对话框中,选择要将调试程序连接到的进程。
  • 如果设备已取得root权限,则可以勾选Show all processes以查看所有进程。
  • Debugger下拉菜单中,可以选择其他调试类型。默认情况下会使用Auto调试类型,具体取决于项目包含Java代码还是C/C++代码。
  1. 点击OK

看Logcat

可以在代码中写入日志消息,在Logcat中查看运行在设备上的应用产生的信息以及有关异常的堆栈轨迹。
Logcat工具视图

import android.util.Log;
...
public class MyActivity extends Activity {
    private static final String TAG = MyActivity.class.getSimpleName();
    ...
    @Override
    public void onCreate(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 */
        }
    }
}

void someOtherMethod() {
    try {
        ...
    } catch (SomeException e) {
        Log.d(TAG, "someOtherMethod()", e);
    }
}

断点使用

Android Studio支持几种类型的断点,这些断点可触发不同的调试操作。最常见的类型是行断点,用于在指定的代码行暂停应用的执行。暂停时,可以检查变量,对表达式求值,然后继续逐行执行,以确定运行时错误的原因。

如需添加行断点,请按以下步骤操作:

  1. 找到您要暂停执行的代码行,然后点击该代码行的左侧边线,或将文字插入点置于该行上并按 Ctrl+F8(在 Mac 上,按 Command+F8)。
  2. 如果应用已在运行,不必更新应用便可添加断点 - 只需点击上面说的Attach debugger to Android proccess按钮。

当代码执行到达该断点时,Android Studio会暂停应用的执行。随后可以使用Debugger标签页中的工具确定应用的状态:(因为我图标改了,截图没多大意义,对照文字去查看比较好)

  • 如需检查变量的对象树,在Variables视图中将其展开。如果Variables视图不可见,点击Restore Variables View
  • 如需在当前执行点对表达式求值,点击Evaluate Expression图标。
  • 如需前进到代码中的下一行(而不进入方法),点击 Step Over 图标 。
  • 如需前进到方法调用内的第一行,点击Step Into图标 。
  • 如需前进到当前方法之外的下一行,点击Step Out图标 。
  • 如需继续正常运行应用,点击Resume Program图标 。

查看和配置断点

如需查看所有断点并配置断点设置,点击Debug窗口左侧的View Breakpoints图标,会弹出Breakpoints窗口:
Breakpoints
如图列出了当前的所有断点,并包括每个断点的行为设置

调试窗口帧

Debugger窗口的Frames窗格中,可以检查导致遇到当前断点的堆栈帧。这样就可以浏览和检查堆栈帧,同时还可以检查应用中的线程列表。如需选择线程,使用线程选择器下拉列表并查看其堆栈帧。点击帧中的元素会在编辑器中打开源代码。

查看和更改资源值显示格式

在调试模式下可以查看Java代码中的变量的资源值并为其选择其他显示格式。在显示了Variables标签页并选择了帧的情况下,执行以下操作:

  1. 在 Variables 列表中,右键点击资源行的任意位置以显示下拉列表。

  2. 在下拉列表中选择 View as,然后选择您要使用的格式。

    可供选择的格式取决于选定资源的数据类型。可能会看到以下一个或多个选项:

  • Class:显示类定义。
  • toString:显示字符串格式。
  • Object:显示对象(类实例)定义。
  • Array:以数组格式显示。
  • Timestamp:按yyyy-mm-dd hh:mm:ss格式显示日期和时间。
  • Auto:Android Studio根据数据类型选择最合适的格式。
  • Binary:显示使用 0 和 1 表示的二进制值。
  • MeasureSpec:从父项传递给选定子项的值。
  • Hex:显示为十六进制值。
  • Primitive:显示为使用原始数据类型表示的数值。
  • Integer:显示 Integer 类型的数值。

先到这吧

最后修改:2021 年 01 月 11 日 09 : 45 AM
如果觉得我的文章对你有用,请随意赞赏