在Eclipse中挂起VM断点后如何恢复所有线程?

Suz*_*ioc 2 java eclipse debugging jvm

默认情况下,Eclipse断点仅挂起一个线程。当我考虑断点时,这将导致应用程序继续运行。

这是断点的另一种模式-挂起整个VM。这将停止所有线程,但显然我无法恢复执行或恢复时执行行为有所不同。

是否可以在Eclipse中对断点进行正常的挂起?

更新

绝对不是我的问题,而是Eclipse / JVM /其他人为错误。我做了一个简单的示例,没有任何线程交互:

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();

    }

}
Run Code Online (Sandbox Code Playgroud)

然后我将异常放入第二个线程(Thread2):

在此处输入图片说明

然后我几乎没有断点命中和恢复,然后删除了断点并恢复了,应用程序挂起了。

下面是挂起状态:

在此处输入图片说明

从输出中可以看到,线程1没有恢复。它只打印了一个刻度并停止了。而且它不等待Eclipse报告的某些监视器,它已挂起。

请注意,我没有在线程1中设置任何断点,而仅在线程2中设置了它们。

同时,一些“最终确定者”线程正在等待一些内部资源。

另外,我注意到,在达到断点后,我必须多次按resume才能真正恢复。

out*_*dev 6

选择屏幕截图所示的项目,然后按F8 在此处输入图片说明