如何使用Android Studio调试器回退一行代码

11

我是新手调试器。 当我跨越一行代码时,我想知道如何回退。 现在我意识到代码无法向后执行? 如果我想回到旧行,是否必须在调试中重新启动活动?

另外,如果您不介意,什么是force-step-into命令?

5个回答

6
不要认为这是可能的。 Android像所有其他调试器一样工作,它们更多或少是代码上的瀑布。 您无法真正向后步进,但这就是断点的作用。 在您想要向后步进的行之前放置一个断点,并重新运行应用程序,它将继续进行直到达到该行。
解释Force-Step-Into,我将首先解释Step-Into / Over。 Step-Over看到您想要的行,并跨越它,在函数调用之后的同一文件中停止在该行。 另一方面,Step Into步入函数调用并停在该函数调用的第一行,可以在新文件或新位置中。 在Android中,有许多被认为是“黑盒子”的函数,因为您并不真正关心它们做什么,因为它们很可能不会影响代码(如Log.d函数)。 Force Step Into允许您进入其中的函数,如果您想要的话。
来源:https://www.quora.com/How-would-you-explain-in-one-line-about-Step-over-Step-into-Force-Step-into-and-Step-out-of-Android-studio

2
多年来,在Visual Studio中拖动指令指针进行调试是可能的。 - Ronen Festinger
从那个评论中,它只是将指令指针向后移动,但副作用已经完成。如果指令是x += 5,且x最初为1,则可以将指针后移,但是在指令开始时x将为6。它不会撤销历史记录。 - OmegaNalphA
是的,但它非常有用。 - Ronen Festinger
正如Ronen Festinger所提到的,Visual Studio及其之前的IDE(包括VB)在几十年来一直支持回溯到任何代码行的功能。奇怪的是,像Android Studio这样所谓的现代IDE却没有这样的支持。再次强调,在Windows Forms中简单地放置一个按钮会自动在后台创建所有所需的绑定,无需像在Android Studio中手动创建。在现代时代,一个新编写的IDE最好包含在旧的IDE中存在的功能。 - undefined

4

可以的!

根据2019年的Android Dev Summit,现在你可以在使用Android Studio进行调试时回退!

观看直播演示

你需要做的就是在调试视图中按下Drop Frame按钮,然后再点击Resume Program。然后你将自动返回到上一个断点。

enter image description here

注意:设备必须运行至少Android 10。


1
非常感谢。我认为这应该是被接受的答案。以前不可能,但现在可以了。虽然与Visual Studio不同。 - nuwancy
谢谢genericUser,你的帮助确实很有用。只有一个小更新:在当前版本的Android Studio(2023.2.3)中,它被隐藏在调试窗口的“更多”选项(三个竖点)中,称为“重置帧”。 - undefined

4

请注意,您可以设置条件断点,即只有在 x == 57 的情况下中断执行(这样您就不必手动跳过所有 56 个断点)。非常有用。只需设置断点,右键单击它并设置您的条件。


3
也许框架可以帮助在调试器窗口中检查 method() 调用栈。
调试器窗口中的框架如下图所示:

Frames in debugger window


0

我认为那是不可能的,就像@OmegaNalphA提到的那样,但你可以查看堆栈跟踪并查看代码执行的顺序。

StackTraceElement trace = new Exception().getStackTrace();
Log.d("myapp", trace.toString());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接