java eclipse 无法在多线程程序的断点后单步执行线程

java eclipse can't step through thread after breakpoint with multithreaded program

我有一个程序有 4 个工作线程在一个方法上运行。如果我在方法中放置一个断点,每个工作线程都会在其上暂停,但是单步执行和单步执行按钮(以及 play/pause/terminate)被禁用,因此我无法遍历执行路径。

我试过使用 suspendVM 而不是挂起线程,而是通过使用条件断点引用 worker1 线程名称来挂起一个线程,但这没有区别,步骤 in/over 按钮被禁用

有人知道如何让它工作吗?当我 运行 只有一个主线程时它工作正常。

好吧,我让它工作了,但不要问我是怎么做到的,我认为它与本机方法有关。如果我的线程在方法旁边(在调用堆栈中)有一个键时挂起,我不能使用步骤按钮,但如果它在调用堆栈中有三个蓝色条,我可以。我得到的似乎是运气,所以我只是重新启动程序,直到我幸运为止。

我发现原因是我的线程被我的代码阻塞了。例如:

pulic void methodA(){
    ...
    methodB()
    ...
}

public void methodB{
    ...
    while(true){// it can be some other reason to block this thread
        Thread.sleep(100);
    }
    ...
}

如果我们在 methodA 中 F6(step over),线程状态将是 "stepping",并且 step instep over 步骤 return 按钮状态被禁用。