Android Studio 线程调试
Android Studio threaded debugging
我在使用 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 中遇到了断点,但我注意到的第一个问题是应用程序的 UI 是空白的,就好像主线程已暂停一样。接下来,我看到线程 b 中的断点也被命中,所以我在 Android Studio 的调试器中调出线程视图,但是当我展开线程 b 箭头时,那里什么也没有。当我展开主线程时,它显示它在 onStart() 的某处暂停。
是我做错了什么还是这个调试器不能同时调试多个线程?
在 IntelliJ IDEA(和 AndroidStudio 基于 IntelliJ)中,当您放置断点时,如果您在断点上单击鼠标右键,将显示一个对话框,您可以 select 是否暂停所有线程(默认)或仅该线程。
您正在暂停所有线程,因为这是默认设置。
在 Android Studio 中,可以指定给定的断点是只暂停正在执行的线程(触发断点)还是暂停所有线程的执行。这是基于每个断点的(即一些断点可以暂停所有线程,而其他断点只能暂停当前线程)。
右键单击断点以显示断点属性window:
请注意 'Make Default' 选项,它允许为所有新创建的断点设置默认值。
如果只有当前线程被挂起(上图中的选项"Thread"),那么其他未挂起线程的stack-frame在Frames window:[=12中是不可见的=]
我在使用 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 中遇到了断点,但我注意到的第一个问题是应用程序的 UI 是空白的,就好像主线程已暂停一样。接下来,我看到线程 b 中的断点也被命中,所以我在 Android Studio 的调试器中调出线程视图,但是当我展开线程 b 箭头时,那里什么也没有。当我展开主线程时,它显示它在 onStart() 的某处暂停。
是我做错了什么还是这个调试器不能同时调试多个线程?
在 IntelliJ IDEA(和 AndroidStudio 基于 IntelliJ)中,当您放置断点时,如果您在断点上单击鼠标右键,将显示一个对话框,您可以 select 是否暂停所有线程(默认)或仅该线程。
您正在暂停所有线程,因为这是默认设置。
在 Android Studio 中,可以指定给定的断点是只暂停正在执行的线程(触发断点)还是暂停所有线程的执行。这是基于每个断点的(即一些断点可以暂停所有线程,而其他断点只能暂停当前线程)。
右键单击断点以显示断点属性window:
请注意 'Make Default' 选项,它允许为所有新创建的断点设置默认值。
如果只有当前线程被挂起(上图中的选项"Thread"),那么其他未挂起线程的stack-frame在Frames window:[=12中是不可见的=]