默认情况下,Eclipse断点只挂起一个线程。当我考虑断点时,这会导致应用程序继续运行。
断点的另一种模式 - 暂停整个VM。这会停止所有线程,但显然我无法恢复执行或执行在恢复时表现不同。
是否可以在Eclipse中对断点进行正常挂起?
更新
肯定不是我的问题,而是Eclipse / JVM /其他人为的bug。我做了一个简单的例子,没有任何线程交互:
package tests;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Try_EclipseMultithreadedBreakpoint {
private static final Logger log = LoggerFactory.getLogger(Try_EclipseMultithreadedBreakpoint.class);
public static class Thread1 extends Thread {
public Thread1() {
setName("Thread1");
}
@Override
public void run() {
for(int i=0; i<10; ++i) {
log.info("tick {}", i);
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
}
}
}
}
public static class Thread2 extends Thread {
public Thread2() {
setName("Thread2");
}
@Override
public void run() {
for(int i=0; i<15; ++i) {
log.info("tick {}", i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
}
}
}
public static void main(String[] args) {
new Thread1().start();
new Thread2().start();
}
}
然后我将异常放入第二个线程(Thread2):
然后我有几个断点命中和简历,然后删除了断点并恢复,应用程序被挂起。
下面是悬挂状态:
正如您在输出中看到的那样,线程1未恢复。它只打印了一个刻度并停止了。并且它不是等待Eclipse报告的某个监视器,它被暂停。
注意,我没有在线程1中设置任何断点,我只在线程2中设置它们。
同时,一些“Finalizer”线程正在等待一些内部资源。
另外,我注意到,在断点击中后,我需要多次按下简历才能恢复。
答案 0 :(得分:4)
选择屏幕截图所示的项目,然后按F8