问题
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.
回答1:
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
回答2:
The bug IDEA-155007 is fixed in 2016.3 (163.7743.44). I've just verified it.
来源:https://stackoverflow.com/questions/36745457/why-does-intellij-idea-not-kill-the-debug-process-immediately