Android Studio线程调试

mig*_*uel 41 java debugging multithreading breakpoints android-studio

我在使用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();
}
Run Code Online (Sandbox Code Playgroud)

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

当应用程序启动时,它会在线程-a中遇到断点,但我注意到的第一个问题是应用程序的UI是空白的,就像主线程暂停一样.接下来我去看看thread-b中的断点也被命中了所以我在Android Studio的调试器中拉出了Threads视图,但是当我去扩展thread-b箭头时,那里什么都没有.当我展开主线程时,它显示它在onStart()的某处暂停.

Android Studio截图

我做错了什么或者这个调试器无法一次调试多个线程?

Mis*_*ith 55

在IntelliJ IDEA(和Android Studio基于IntelliJ)中,当您放置断点时,如果右键单击它,则会显示一个对话框,您可以选择是暂停所有线程(默认)还是仅暂停该线程.

您正在暂停所有线程,因为它是默认设置.


CJB*_*JBS 24

在Android Studio中,可以指定给定断点是暂停执行只执行线程(触发断点)还是所有线程.这是基于每个断点的(即一些断点可以挂起所有线程,而其他断点只挂起当前线程).

右键单击断点以显示"断点属性"窗口:

断点属性

请注意"Make Default"选项,允许对所有新创建的断点进行默认.

如果只挂起当前线程(上图中的选项"Thread"),则Frames窗口中将不会显示其他未挂起线程的堆栈帧:

框架不适用于未悬挂的线程