René Link
René Link

Reputation: 51363

Why does intellij idea not kill the debug process immediately?

I'm using idea 2016.1.1 and wonder why idea does not kill the debug process immediately when I click the stop button.

E.g. use this piece of code to reproduce it

public class Main {

  public static void main(String[] args) {
    int i = 0;
    while (true) {
      i++;
      System.out.print("I'm still alive: ");
      System.out.println(i);
    }
  }
}

Set a breakpoint before the loop begins.

enter image description here

Start a debugging session, wait until it breaks and press the red stop button (CTRL-F2).

enter image description here

I would expect that the process is stopped immediately and that it does not print anything, but it prints:

"C:\Program Files\Java\jdk1.6.0_38\bin\java" ....
Connected to the target VM, address: '127.0.0.1:54394', transport: 'socket'
Disconnected from the target VM, address: '127.0.0.1:54394', transport: 'socket'
I'm still alive: 1
I'm still alive: 2
I'm still alive: 3
I'm still alive: 4
...
I'm still alive: 319
I'm still alive: 320
I'm still alive: 321
I'm still alive: 
Process finished with exit code -1

Why is the process not stopped immediately?

Is there another way to force an immediately stop?

EDIT

Just tried it with idea 14.1.5. The process stops immediately as expected. It seems that a bug was introduced with 2016.

Upvotes: 15

Views: 9057

Answers (3)

Ahmed Nabil
Ahmed Nabil

Reputation: 18986

When press Stop during a debugging session,
The default behavior of IntelliJ Idea is not to kill the process immediately!.

But if you need to change this behavior to kill the debugging process immediately
Which I think that, should be the default behavior :)

You can activate it via the Settings:
Settings > Build, Execution, Development > Debugger >

enter image description here

Upvotes: 14

René Link
René Link

Reputation: 51363

The bug IDEA-155007 is fixed in 2016.3 (163.7743.44). I've just verified it.

Upvotes: 4

René Link
René Link

Reputation: 51363

My investigations so far...

When IDEA starts a java process it uses main wrapper. This wrapper starts a daemon thread that listens to a ServerSocket for commands.

IDEA sends a STOP signal to that server socket. When the server thread receives the STOP signal it exists the jvm using System.exit(1).

It seems that IDEA resumes the JVM from debug and then sends the STOP signal. So until the STOP signal is received the process continues.

I opened a bug at https://youtrack.jetbrains.com/issue/IDEA-155007

Upvotes: 4

Related Questions