Android Studio 线程调试

54

我一直在使用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();
}

我在thread-a和thread-b的Log.v行上设置了断点,然后在我的Lollipop Nexus 5上以调试模式运行它。

当应用程序启动时,它会触发thread-a中的断点,但我注意到的第一个问题是应用程序的用户界面为空白的,就好像主线程被暂停了一样。接下来我去看thread-b中的断点也被触发了,所以我打开了Android Studio调试器中的"Threads"视图,但是当我尝试展开thread-b箭头时,却什么也没有显示出来。当我展开主线程时,它显示正在onStart()处暂停。

Android Studio截图

我做错了什么还是这个调试器不能同时调试多个线程?


1
相关:https://dev59.com/_m025IYBdhLWcg3wwYv4 和 https://dev59.com/F2sz5IYBdhLWcg3wADMm - Mister Smith
1
顺便问一下,为什么Binder_1和Binder_2的状态是RUNNING,而其他所有线程都被挂起了? - DYS
2个回答

71
在IntelliJ IDEA中(Android Studio基于IntelliJ),当您设置断点时,如果您在其上右键单击,则会显示对话框,您可以选择暂停所有线程(默认)或仅暂停该线程。
由于默认设置,您正在暂停所有线程。

即使将所有模式都设置好,某些挂起的函数仍无法正常工作。 - Mahdi

32
在Android Studio中,可以指定一个断点是否暂停执行所有线程(触发断点的执行线程和其他线程)或仅暂停执行当前线程。这是基于每个断点的设置(即有些断点会暂停所有线程,而其他断点仅暂停当前线程)。
右键单击断点以打开“断点属性”窗口: Breakpoint properties 请注意“设为默认值”选项,它允许为所有新创建的断点设置默认值。
如果仅暂停当前线程(图像上的“Thread”选项),则其他未暂停线程的堆栈帧将不在“帧”窗口中可见: Frames not available for unsuspended thread

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