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

时间:2014-12-07 17:11:23

标签: java eclipse debugging jvm

默认情况下,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):

enter image description here

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

下面是悬挂状态:

enter image description here

正如您在输出中看到的那样,线程1未恢复。它只打印了一个刻度并停止了。并且它不是等待Eclipse报告的某个监视器,它被暂停。

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

同时,一些“Finalizer”线程正在等待一些内部资源。

另外,我注意到,在断点击中后,我需要多次按下简历才能恢复。

1 个答案:

答案 0 :(得分:4)

选择屏幕截图所示的项目,然后按F8 enter image description here