intellij - 不停止多线程代码中的所有断点

Bob*_*r02 9 multithreading breakpoints intellij-idea

我试图使用断点运行以下代码,如下所示:

    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("Starting"); //breakpoint here
        }
    }).start();

    int i = 10;
    i++; //breakpoint here
Run Code Online (Sandbox Code Playgroud)

当这个代码只运行i ++断点时...如果我删除那个,那么另一个线程的断点将被正确命中.为什么会出现这种奇怪的行为?

Dor*_*old 7

这在http://www.jetbrains.com/idea/webhelp/breakpoints-2.html中有记录:

在某些情况下,IntelliJ IDEA不会在断点处停止.请考虑以下情况:在类的不同方法中设置两个断点,并将挂起策略设置为All.当其中一个断点被击中时,执行一些步骤操作.如果在步进另一个线程遇到第二个断点时,IntelliJ IDEA将不会停在那里.

我复制了你的代码示例并重新创建了这种情况.果然,就像它在文档中说的那样,在i++断点处停止后,如果我按下F8(跳过),程序就不会停在另一个断点上.但是如果我按下F9(恢复),程序在另一个断点上再次停止.


Nat*_*han 6

我刚刚遇到了这个问题,为了其他遇到这个问题的人,这里是这种行为的原因以及如何改变它。

正如多伦指出的那样,有相关的文件。然而,需要注意的重要一点是,默认情况下,当到达断点时,JVM 中的所有线程都会挂起。

您所期望的(也是我所期望的)是只有带有断点的线程被挂起。

这不是你想要的,也不是我想要的。

更改此行为(并提供所需的行为)。

1) 通过左键单击边距创建断点。
2) 按 ctrl+shift+F8(调出断点菜单)。
3) 选择断点。您将看到它的选项。
4) 确保选中“挂起”并选择“线程”单选选项。
5) 单击“设为默认”按钮。

现在,当您运行时,您将看到不同线程中的断点被命中。