Отладка Java в Eclipse останавливается без точки останова - PullRequest
0 голосов
/ 16 ноября 2018

Я хочу отладить очень простой код, состоящий из двух простейших классов.

package test.pack;

public class TestClass {

    public static void main(String[] args) {
        TestClassTwo tc2 = new TestClassTwo();
    }

}

=================================================

package test.pack;

public class TestClassTwo {

    public TestClassTwo() {
        System.out.println(this);
    }

}

=========================================================

Итак, когда я переключаю точку останова при инициализацииКласс TestClassTwo и запустить отладку по [F11] и [F5], я должен попасть в конструктор TestClassTwo.Но вместо этого точка останова попадает в такое место, где я не устанавливаю никаких точек останова. Это показано на этой картинке

Я пробую это в [Eclipse IDE для разработчиков Java EE] и [Eclipse IDE для разработчиков Java], также я загружаю и устанавливаю последнюю версию JDK из oficialСайт Oracle.

Но есть одно ограничение: я должен использовать версию Java 1.7 в своем проекте в соответствии с технической задачей со стороны бизнеса.

Я пытался использовать решения из этой темы. Отладка попадания без точки останова - Eclipse , но это не помогло.

Далее я прилагаю скриншоты, которые могут как-то помочь решить мою проблему.

Библиотека Java внастройки проекта

Установленная JRE в настройках Eclipse

Java-версия в cmd

Системапеременные в переменных окружения

Системные переменные в переменных окружения также

версия Windows

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Прежде всего, вы все сделали правильно до этого момента.

«Ошибка», если вы хотите назвать это так, возникает, когда вы нажимаете F5.Теперь эта команда называется step into, что означает, что она продолжит выполнение в следующем слое более глубокого стека.

Из кода, который вы предполагали, это будет конструктор TestClassTwo, но прежде чем java сможет вызвать конструктор, он должен сначала инициализировать сам класс, и это именно то, что указывает Debug View на рисунке.

Дополнительный вопрос: Вы нажали F5несколько раз, чтобы получить это глубоко в ClassLoader.loadClass()?


Для текущего выполнения вы можете выбрать вторую последнюю строку в Debug View , которая равна

Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available

и затем нажмите F7.Это выведет соответствующего метода на продолжение выполнения на предыдущем уровне стека, где должен последовать вызов конструктора TestClassTwo.


Для будущей отладки вы можетехочу познакомиться с Step Filtering .Шаговые фильтры позволяют исключать определенные части кода из отладки.Они будут выполнены, но eclipse автоматически «перешагнет» их.

На соответствующей странице настроек, Java > Debug > Step Filtering, eclipse удобно предоставляет возможность отдельно включать и отключать пошаговую фильтрацию для java.lang.ClassLoader.

0 голосов
/ 16 ноября 2018

Вы пытались вывести это, что означает ссылку на этот объект, но пытались вызвать его из конструктора, который создает этот объект. Попробуйте вызвать этот код после конструктора в другом методе.

Вероятно, сбой отладки произошел из-за исключения нулевой ссылки, что приводит к ошибке в стеке вызовов, поэтому программа мгновенно завершает работу.

...