Если остановить программу на Java в режиме debug, то она всё равно выполнится до конца
Случайно наткнулся на такую вещь: например есть простенькая программа на Java:
package my.demo1;
public class Demo1 {
public static void main(String[] args) {
System.out.println("Main START");
print_smth();
System.out.println("Main FINISH");
}
private static void print_smth() {
System.out.println(" Hello 1");
System.out.println(" Hello 2");
System.out.println(" Hello 3");
}
}
Запускаю её в режиме debug и дохожу до строчки System.out.println(" Hello 2");
При этом в консоли вижу то, что и ожидал увидеть:
А теперь нажму в студии (Intellij IDEA) на красный квадратик (Stop Demo1) и увижу в консоли следующее:
т.е. программа не просто остановилась, а она почему-то выполнилась до самого конца, о чём свидетельствуют сообщения в консоле.
Попробую сделать тоже самое, но не в режиме Debug, а в обычном режиме запуска. Для этого немного изменю код (добавлю паузу в 1 минуту):
package my.demo1;
public class Demo1 {
public static void main(String[] args) throws InterruptedException {
System.out.println("Main START");
print_smth();
System.out.println("Main FINISH");
}
private static void print_smth() throws InterruptedException {
System.out.println(" Hello 1");
Thread.sleep(60_000L); // пауза 1 минута
System.out.println(" Hello 2");
System.out.println(" Hello 3");
}
}
Теперь запускаю программу в обычном режиме (Run Demo1). Она дойдёт до строчки с паузой Thread.sleep(60_000L); // пауза 1 минута
и встанет на паузу на 1 минуту. В этот момент нажму опять Stop Demo1. В этот раз вывод в консоль такой, как я и ожидаю увидеть:
т.е. программу выключили, и она реально выключилась и не стала дорабатывать до конца.
Подскажите, пожалуйста, почему такое странное поведение при остановке программы в режиме debug? Почему в этом случае она не сразу останавливается, а дорабатывает свою логику до конца? Это проблема Java или студии Intellij IDEA ? Можно ли это как-то исправить?
На всякий случай проделал на 2 разных ноутах, с разными версиями jdk и IDEA. Больше всего меня удивило: почему я раньше этого не замечал??!!
Ответы (1 шт):
Пожалуйста, включите опцию "Kill the debug process immediately" в меню Preferences | Build, Execution, Deployment | Debugger чтобы избежать такого поведения.
Но обязательно почитайте про минусы такого решения (есть в источнике)