Почему IntelliJ не будет отлаживать в некоторых случаях с ошибкой. Пример прилагается

#java #intellij-idea

Вопрос:

Я кое-что тестировал и столкнулся с любопытным случаем, когда IntelliJ не отлаживал мой код, когда у меня была точка останова, как показано на рисунке 1. Но когда я перемещаю точку останова, все работает нормально.

Код:

 public class Walrus {
    public int weight;
    public double tuskSize;

    public Walrus(int weight, int x){
        this.weight = weight;
        this.tuskSize = tuskSize;
    }

    public static void main(String[] args) {
// Random declared ints.
        int x;
        double y;
// Declared a Walrus
        Walrus someWalrus;
// Set to null
        someWalrus = null;
// Initialize a new Walrus.
        Walrus a = new Walrus(10,3);
        System.out.println();
    }
}
 

Когда у меня есть точка отладки здесь (см. Рисунок), это не работает и выдает следующую ошибку:

Точка отладки

Ошибка:

Подключен к целевой виртуальной машине, адрес: ‘127.0.0.1:59776’, транспорт: ‘сокет’ 64-разрядная серверная виртуальная машина OpenJDK предупреждение: Общий доступ поддерживается только для классов загрузчика, поскольку путь к классу начальной загрузки был добавлен Отключен от целевой виртуальной машины, адрес: ‘127.0.0.1:59776’, транспорт: процесс «сокет» завершен с кодом выхода 0

Теперь, если я сделаю это (см. 2-е изображение), все будет нормально:

Он работает для этого.

Я думаю, может быть, он думает, что отлаживать нечего, так как я не назначил ни одну из переменных. Но это всего лишь предположение. Не мог бы кто-нибудь, пожалуйста, объяснить, что происходит здесь, под капотом? Спасибо.

Ответ №1:

После выполнения программы первая точка останова отключается как «Исполняемый код не найден». Видеть

Комментарии:

1. Спасибо! Не могли бы вы объяснить, пожалуйста, почему он не исполняется? Потому что я читал, что, грубо говоря, когда вы объявляете только переменную, Java ищет некоторую память в компьютере и резервирует ее. Например, для int x; он резервирует память в 32 бита, к которой мы, конечно, не можем получить доступ, но он что-то сделал, так что разве он не выполнил это утверждение?

2. Резервирование памяти происходит до того момента, как отладчик сможет подключиться к запущенному процессу java. Это работа компилятора.