gpt4 book ai didi

android - 如何从断点找到调用线程堆栈跟踪?

转载 作者:搜寻专家 更新时间:2023-11-01 09:35:11 24 4
gpt4 key购买 nike

我的 Android 代码中有一个线程,在调试时,我需要在线程内设置一个断点。但是,一旦我位于线程内的断点处,我就看不到调用线程的堆栈跟踪。此时,我通常需要在调用线程处设置一个新的断点并从那里取走。

enter image description here

如您在上图中所见,调试器中的堆栈跟踪将 run() 显示为顶级方法。我如何在堆栈跟踪中向上移动,或切换线程以查看 start() 以及它之前发生的任何事情?

最佳答案

您不能或不应该看到创建另一个线程的第一个线程的堆栈跟踪。它在多线程中的工作方式是每个都将并行工作。可能发生的情况是第一个线程调用第二个线程的创建,然后继续执行其他方法或工作,而操作系统负责创建第二个线程并在特定时间(通常是尽快)开始执行一些操作。第二个线程将包含一个几乎堆栈跟踪,因为它正在执行的第一个方法正在运行。它会在代码访问其他方法时填充,并在它退出/完成正在执行的方法时清空。因此,这样的代码:

Log.i("FirstThread", "creating secondThread");
Thread secondThread = new Thread(new Runnable() {
@Override
public void run() {
Log.i("SecondThread", "run called");
}
});
secondThread.start();
Log.i("FirstThread", "finished creating secondThread");

可能以以下日志结束:

FirstThread: creating secondThread
FirstThread: finished creating secondThread
SecondThread: run called

底线是第一个日志将始终是第一个,因为线程第二个线程是在它之后创建的,但是第二个和第三个日志可以在不同的时间和试验中切换(一个在另一个之前出现,反之亦然)。那是因为它们是并行工作的,并且操作系统正在管理第二个线程启动的时间以及执行它的资源。

您可以看到其他线程正在执行什么,但是您将看到的可能是 Android 的主 UI 线程,因此它可能执行您的代码并执行其他事情与绘制您的 UI 和系统相关的东西相关,从而使您的应用程序保持正常运行。

为此,只需右键单击您放置在线程中的断点,启用暂停并选择全部,如下图所示,然后按< strong>完成:

enter image description here

关于android - 如何从断点找到调用线程堆栈跟踪?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43916747/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com