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

时间:2013-03-08 16:26:32

标签: multithreading intellij-idea breakpoints

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

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

    int i = 10;
    i++; //breakpoint here

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

3 个答案:

答案 0 :(得分:6)

http://www.jetbrains.com/idea/webhelp/breakpoints-2.html中记录了这一点:

  

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

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

答案 1 :(得分:0)

因为另一个线程预定在后台运行,并且当OS线程调度程序决定运行它时,它将运行。如果你有一个断点,它就会被击中。

当您只运行代码时,它不会一定启动,因此i++处的断点会立即被触发。

答案 2 :(得分:0)

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

Doron指出,有关于此的文件。但是,重要需要注意的是,默认情况下,当达到断点时,JVM中的所有线程都会被挂起。

您期望(以及我期待的)是只有具有断点的线程被暂停。

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

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

1)左键单击边距创建一个断点 2)按ctrl + shift + F8(调出断点菜单) 3)选择断点。你会看到它的选项 4)确保"暂停"检查并且"线程"选择了无线电选项 5)点击"默认"按钮。

现在,当你运行时,你会看到不同线程中的断点被击中。