2015-09-04 3 views
0

Итак, я обновился до Eclipse Mars (4.5), и по какой-то причине я не могу использовать код горячей замены в отладчике. Обычно я мог бы сделать что-то вроде этого:Eclipse Mars (4.5) код горячей замены в отладчике не работает

public static void main(String[] args){ 
    while(true){ 
     System.out.println("123"); 
    } 
} 

Тогда, если я начал его в режиме отладки, изменил текст на «321», а затем сохранить, то он будет обновлять без необходимости перезапуска. Он ведет себя точно так же, как и в режиме «Запуск» вместо «Отладка».

То, что я пробовал:

  • Создание нового рабочего пространства, создавая свежий проект, используя код выше, ничего не происходит
  • ли несколько JDKs установленных, попробовал с Java 6, 7 & 8, изменили рабочее пространство и/или параметры проекта, чтобы использовать разные JDK, ничего не происходит (факт, что у меня есть несколько версий java, не должен иметь значения, поскольку это было только в тот момент, когда я обновил eclipse, он прекратил работу)
  • Пробная деинсталляция удаление любых файлов конфигурации для затмения (на mac, так что это будет каждый fi le/folder со словом «eclipse» в папке ~/Library, запустил поиск «найти», чтобы обнаружить все файлы). Затем попытался создать новую рабочую область, теперь проект, код перефразировал, работал в режиме отладки, ничего не происходит при сохранении.
  • также уверен, что я есть «Auto Сложение» включена, даже пытались «очистить», и отключить автоматическую сборку, а затем сохранить код, а затем сделать ручной сборки, а отладчик работает: ничего не происходит

Я начинаю отчаянно беспокоиться, так как мне трудно получить работу без наличия режима отладки, поэтому любая помощь/подсказки в правильном направлении будет очень благодарна.

ответ

0

Ok, так что я, наконец, нашел проблему. Кажется, что вы не можете редактировать петли во время их работы. Скажем, у вас есть такая петля:

public static void main(String[] args){ 
    while(true){ 
     System.out.println("123"); 
    } 
} 

Тогда вы не можете редактировать строку «123». Вы можете, как когда-либо методы редактирования, которые называются внутри цикла, как это:

public static void main(String[] args){ 
    while(true){ 
     System.out.println(methodA()); 
    } 
} 

public static String methodA(){ 
    return "123"; 
} 

Теперь вы можете редактировать строку «123», и он будет обновляться. Это также относится к бесконечным циклам «для», поэтому предположение о том, что тело метода должно быть «повторно вызвано» перед обновлением, и этого недостаточно, чтобы ждать следующего вызова цикла.

0

HotSwap не работает со статическими методами.
Однако он отлично работает с методами экземпляра, поэтому он будет работать на этот код:

public class Main { 

    public static void main(String[] args) { 
     new Main().f(); 
    } 

    public void f() { 
     while(true){ 
      System.out.println("123"); 
     } 
    } 
} 
+0

Я не думаю, что это статично или не имеет значения. Пробовал свой код выше, не повезло. Обычно, когда горячая смена завершается с ошибкой (например, вы пытаетесь переименовать метод или что-то в этом роде), он дает вам предупреждение, сообщая вам, что он не может этого сделать, а затем попросить перезапустить приложение, если вы хотите его изменить. Это окно даже не открывается, когда я сохраняю или создаю, ничего не происходит, как будто он даже не работает в режиме отладки. –

Смежные вопросы