Android studio断点调试(全在这里)

本文详细介绍Android Studio中的调试功能,包括基本的断点调试方法如stepover、stepinto等,以及高级调试技巧,例如跨断点调试、观察变量变化等。同时介绍了如何在普通模式下通过Attach模式进行调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说Android Studio的调试是我见过最棒的。


下面会将debug模式和Attach模式的断点调试


好了开始写一个简单的调试程序,我们先来一个for循环

设置断点(点击红点位置添加或取消断点)

这里写图片描述

点击debug模式运行

这里写图片描述

查看调试面板

这里写图片描述

一、简单调试


1. step over:一步步往下走

这里写图片描述

当前程序运行的位置,我们看到i的值已经在程序代码中展示出来了,黄色的代码处,这个是AS的功能,对于我们调试来讲,这简直是非常大的福利了。

这里写图片描述

点击单步调试按钮或按快捷键F8,看看效果。这里我们看到selector变量的值已经出来了selector:0,我们在看看黄色位置i的当前值是0。

这里写图片描述

这时我们继续F8,我们切换到logcat查看日志,我打印出的i的值是0,

这里写图片描述

我们在切回道Debugger面板,可以看到Variables显示面板中,有i的值是0,selector的值是0。以及我们可以看到Frames控制面板中可以显示出当前程序的位置在:onCreate():28,第28行。

这里写图片描述

2. step into:看到方法往里走

比如我们的for循环当中调用了一个stepNext(int i)方法,当我们走到这里想看看这个方法里面的运行过程的时候我们可以这样,当走到这个方法的时候我们可以按下F7,或者如下图的图标。

这里写图片描述

这时就走到了stepNext方法当中。

这里写图片描述

在这里打印了一个log,我们再按一下F8我们来看看Logcat, 这里我打印的log都是为了做教程用,调试我们就不用打log了直接看显示面板就OK了

这里写图片描述

3. force step into :所有方法看完整

这个是可以看到你所调用的所有方法的实现会让你跟着它走一遍,研究源码使用非常方便

这里写图片描述

4. step out :有断点下一个,走完断点继续走

这里如果我们的一个流程当中,包括调用的方法,如果有断点走到下一个断点,如果没有断点,而是在一个调用的方法当中,会跳出这个方法,继续走。

这里写图片描述

这里理解比较难,举个例子:
这里写图片描述

(上图)我现在程序位置在第一个断点位置(24行),我调用的stepNext方法中也有一个断点,此时我按下step out按钮会走到stepNext中的断点处(39行)我此时如果再按一下step out 会走到stepNext方法的调用出的下一个可执行代码(30行)

这里写图片描述

(上图)如果我现在程序位置在stepNext的方法中,如果我此时按下step out,会走到stepNext方法的调用出的下一个可执行代码(30行)

5. run to Cursor :下个断点我们见

这里的意思就是说,会很快执行到下一个断点的位置,而且可以静如任何调用的方法

这里写图片描述

二、高级调试


1. 跨断点调试

如果我们设置了多个断点,现在我们需要直接跳转到下一个断点,那么直接点击下图就可以了

这里写图片描述

2.观察变量

如果我们想观察1个或者几个变量的值的变化,如果我们在Variables显示面版中观察如果我这里有太多太多的自定义变量和系统变量了,那么就难观察了,我们可以做如下操作:
点击Watches,点击+号,然后输入变量的名称回车就OK了,而且会有历史记录哦

这里写图片描述

如果变量名比较长我们可以这样:
选择[Variables]中的变量名然后点击[右键],选择[Add to Watches],然后Watches面板中就有了

这里写图片描述

3.设置变量的值

在程序中有很多的条件语句和循环语句,调试也是比较耗时的,我们可以通过快速设置变量的值来加快调试速度,我们可以做如下操作:
选择[Variables]中的变量名然后点击[右键],选择[Set Value..]或者选择之后直接F2(如上图)(下图为Variables面板)

这里写图片描述

4.查看断点

这里写图片描述

点击之后我们可以看到所有的断点,以及位置代码,也可以设置一些属性
这里写图片描述

5.停止调试

要注意的是这里的[停止调试]不是让程序停止,而是跳过所有调试
这里写图片描述

到这里我们的Android Studio的断点调试和高级调试就完毕了。


Attach模式调试

等等!先别着急翻页,本期还有最后一个压轴的技术点要分享给大家。 
想象一下下面的场景:你的APK如果已经运行在普通模式(非Debug)的情况下,你突然想Debug,而又不想重新运行浪费时间,该怎么办呢? 
普通模式下想设置断点进行调试可不可以呢? 
当然是可以的,不仅可以,这种方式已经渐渐替代了原先的方案,毕竟很方便,不是吗?那具体要怎么做呢?

一、先设置断点,再正常运行APK 
attach process(图4.2)

二、点击Attach调试

或者像下面一样打开也是可以的

attach process(图4.3)

即运行Run->Attach debugger to Android process 
attach process(图4.4)

attach process到指定进程,条件触发之后就可以直接进入调试模式。之后该怎么做不用我再说了吧?


Android Studio调试 Flutter 应用并设置断点是一个常见的调试方法,它可以帮助开发者快速定位和解决代码中的问题。以下是详细的步骤和注意事项: 1. **确保开发环境配置正确** 在 Android Studio 中开发 Flutter 应用,需要安装 Flutter 插件和 Dart 插件。确保这些插件已经正确安装,并且 Flutter SDK 的路径已经配置好。可以通过 `File > Settings > Plugins` 检查插件是否安装,以及 `File > Settings > Languages & Frameworks > Flutter` 验证 Flutter SDK 的路径是否正确设置[^1]。 2. **启动调试会话** 在 Android Studio 中运行 Flutter 应用的调试模式非常简单。点击工具栏上的调试按钮(通常是一个绿色的虫子图标),或者使用快捷键 `Shift + F9` 启动调试会话。应用会在连接的设备或模拟器上启动,并进入调试模式。 3. **设置断点** 在代码编辑器中,找到需要调试的代码行,点击该行左侧的空白区域(即行号旁边),会出现一个红色的圆点,表示断点已经设置成功。断点可以设置在任意可执行的代码行上,例如函数调用、变量赋值等。当程序执行到断点时,会暂停执行,允许开发者检查当前的变量值、调用栈等信息[^1]。 4. **使用调试工具** 当程序在断点处暂停时,可以使用调试工具栏中的按钮来控制程序的执行。常用的调试操作包括: - **Step Over (F8)**:逐行执行代码,不会进入函数内部。 - **Step Into (F7)**:进入当前行的函数内部,逐行调试函数代码。 - **Step Out (Shift + F8)**:从当前函数中跳出,返回到调用该函数的代码行。 - **Resume Program (F9)**:继续执行程序,直到下一个断点或程序结束。 - **Stop (Ctrl + F2)**:停止当前的调试会话。 5. **检查变量和表达式** 在调试过程中,可以将鼠标悬停在变量上,查看其当前的值。此外,还可以通过 `Variables` 面板查看和修改变量的值。如果需要监控某个特定的表达式,可以使用 `Watches` 面板添加表达式,实时查看其值的变化。 6. **条件断点** 有时,可能只希望在特定条件下触发断点。可以通过右键点击断点,选择 `More` 或 `Edit Breakpoint`,然后设置条件表达式。只有当条件为 `true` 时,断点才会生效。这对于调试复杂的逻辑或特定的输入情况非常有用。 7. **日志输出** 在调试过程中,可以通过 `Console` 面板查看应用的日志输出。Flutter 应用的日志通常包括 `print()` 函数的输出、异常信息以及其他调试信息。这些日志可以帮助开发者了解程序的执行流程和状态。 8. **解决断点不生效的问题** 如果在调试过程中发现断点不生效,可能是由于以下原因: - **代码未被正确编译**:确保应用是使用调试模式编译的。可以通过 `flutter run` 命令启动应用,或者在 Android Studio 中使用调试按钮启动应用。 - **断点设置错误**:确保断点设置在可执行的代码行上,而不是注释或空行。 - **多进程问题**:如果应用使用了多进程(例如通过 `android:process=":remote"` 设置),需要确保调试器连接到正确的进程。可以通过 `Attach Debugger to Android Process` 功能选择目标进程进行调试[^2]。 9. **热重载与调试** Flutter 的热重载功能可以在不重启应用的情况下更新代码,这对于调试非常有帮助。然而,在调试模式下,热重载可能会导致断点失效或调试器行为异常。因此,建议在调试时尽量避免频繁使用热重载,或者在热重载后重新设置断点。 ### 示例代码:调试 Flutter 应用的简单示例 以下是一个简单的 Flutter 应用示例,展示了如何在代码中设置断点并进行调试: ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Debug Demo', home: MyHomePage(), ); } } class MyHomePage extends StatefulWidget { @override _MyHomePageState createState() => _MyHomePageState(); } class _MyHomePageState extends State<MyHomePage> { int _counter = 0; void _incrementCounter() { setState(() { _counter++; }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Flutter Debug Demo'), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text( 'You have pushed the button this many times:', ), Text( '$_counter', style: Theme.of(context).textTheme.headline4, ), ], ), ), floatingActionButton: FloatingActionButton( onPressed: _incrementCounter, tooltip: 'Increment', child: Icon(Icons.add), ), ); } } ``` 在这个示例中,可以在 `_incrementCounter` 方法中设置断点,观察 `_counter` 变量的变化。当用户点击浮动操作按钮时,程序会在断点处暂停,开发者可以检查 `_counter` 的值,并逐步执行代码以了解其变化过程。 ###
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值