Reputation: 51363
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.
Start a debugging session, wait until it breaks and press the red stop button (CTRL-F2).
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
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
>
Upvotes: 14
Reputation: 51363
The bug IDEA-155007 is fixed in 2016.3 (163.7743.44). I've just verified it.
Upvotes: 4
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