Android Studio 线程调试
Posted
技术标签:
【中文标题】Android Studio 线程调试【英文标题】:Android Studio threaded debugging 【发布时间】:2015-05-28 12:26:44 【问题描述】:我在使用 android Studio 1.1 调试多线程应用时遇到了问题。似乎当一个断点被击中时,所有其他线程也停止了,而不仅仅是带有断点的那个。我在 Activity 的 onCreate 中使用以下方法创建了一个简单的测试应用程序。
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Thread a = new Thread("thread-a")
@Override
public void run()
Log.v("thread", "thread-a");
;
Thread b = new Thread("thread-b")
@Override
public void run()
Log.v("thread", "thread-b");
;
a.start();
b.start();
我在线程 a 和线程 b 的 Log.v 行设置断点,然后在 Lollipop Nexus 5 上以调试模式运行它。
当应用程序启动时,它会在线程 a 中遇到断点,但我注意到的第一个问题是应用程序的 UI 是空白的,就好像主线程已暂停一样。接下来,我看到线程 b 中的断点也被命中,所以我在 Android Studio 的调试器中打开了线程视图,但是当我去展开线程 b 箭头时,那里什么也没有。当我展开主线程时,它显示它在 onStart() 中的某处暂停。
是我做错了什么还是这个调试器无法同时调试多个线程?
【问题讨论】:
相关:***.com/questions/5818391/… 和 ***.com/questions/8174408/… 顺便说一句,为什么 Binder_1 和 Binder_2 的状态为 RUNNING 而所有其他线程都被挂起? 【参考方案1】:在 Android Studio 中,可以指定给定断点是暂停执行线程(触发断点)还是暂停所有线程的执行。这是基于每个断点的(即,一些断点可以挂起所有线程,而其他断点只挂起当前线程)。
右击断点,弹出断点属性窗口:
注意“Make Default”选项,它允许对所有新创建的断点进行默认设置。
如果只有当前线程被挂起(上图中的选项“线程”),那么其他未挂起线程的堆栈帧将不会在 Frames 窗口中可见:
【讨论】:
【参考方案2】:在 IntelliJ IDEA(Android Studio 基于 IntelliJ)中,当您放置断点时,如果您右键单击它会显示一个对话框,您可以选择是暂停所有线程(默认)还是仅暂停该线程.
您正在暂停所有线程,因为它是默认设置。
【讨论】:
即使将所有模式置于某些挂起的功能中也不起作用。以上是关于Android Studio 线程调试的主要内容,如果未能解决你的问题,请参考以下文章