Как дебажить мод

1,087
2
Это малюсенький вопрос связанный с дебагом (Честно, я никогда не игрался с дебагом. Вот такой я монстр). Как настроить дебаг в IntelliJ IDEA для Minecraft? Просто есть некоторые проблемы с кое чем, а включать заново майн ради проверки не очень хочется.
 
808
3
124
Берешь и запускаешь игру через Debug, а не через Run. Странная проблема, это в любой IDE для чего угодно так делается.
 
1,087
2
GloomyFolken написал(а):
Берешь и запускаешь игру через Debug, а не через Run. Странная проблема, это в любой IDE для чего угодно так делается. 
Я уже давно разобрался :D
 
1,239
2
24
Жму на жучка,все работает,но если менять код то изменений в игре нет.Как?
 
1,137
5
3
Секунд пять, примерно. Вот интересно, что методы перекомпилировать нельзя. Как вставлять то все таки?
 
1,239
2
24
На момент написания этой статьи не поддерживается изменения иерархии классов, т.е. если в программе один класс уже описан как “A extends B” то изменить его на “A extends C” нельзя. Тоже самое относится и к изменению списка интерфейсов — нельзя добавить или удалить интерфейсы из объявления класса.

Существуют ещё некоторые моменты, которые стоит учитывать. 

Статическая инициализация. JRebel старается сохранить состояние объектов, которые уже созданы в памяти. Соответственно, не происходит перезапуска конструкторов или статического блока инициализации. Из этого вытекает парочка последствий.

Изменив значение статического поля мы ожидаем увидеть это новое значение в новой версии класса. Значение это, на самом деле, будет присвоено в статическом блоке, который JRebel не перезапустил. Соответственно, нового значения мы не увидим. В данный момент JRebel перезапустит статический блок только в случае добавления нового статического поля.

Причина такого поведения в том, что происходящее в статическом блоке может неопределённым способом влиять на состояние объекта, поэтому JRebel старается перезапускать его только в самом крайнем случае.

Второе следствие, которое выходит из того, что JRebel не перезапускает конструкторы, это то, что при добавлении нового поля в класс будет присвоено значение “по умолчанию” для данного типа. Т.е. если добавить поле, тип которого не будет примитивом, то присвоенное значение будет null, что в общем случае может повлечь за собой NullPointerException, в случае если это поле будет разыменовано для существующего объекта.
Буду дебажить обычным методом)
Всем спасибо
 
183
1
4
XuPuPG написал(а):
На момент написания этой статьи не поддерживается изменения иерархии классов, т.е. если в программе один класс уже описан как “A extends B” то изменить его на “A extends C” нельзя. Тоже самое относится и к изменению списка интерфейсов — нельзя добавить или удалить интерфейсы из объявления класса.

Существуют ещё некоторые моменты, которые стоит учитывать. 

Статическая инициализация. JRebel старается сохранить состояние объектов, которые уже созданы в памяти. Соответственно, не происходит перезапуска конструкторов или статического блока инициализации. Из этого вытекает парочка последствий.

Изменив значение статического поля мы ожидаем увидеть это новое значение в новой версии класса. Значение это, на самом деле, будет присвоено в статическом блоке, который JRebel не перезапустил. Соответственно, нового значения мы не увидим. В данный момент JRebel перезапустит статический блок только в случае добавления нового статического поля.

Причина такого поведения в том, что происходящее в статическом блоке может неопределённым способом влиять на состояние объекта, поэтому JRebel старается перезапускать его только в самом крайнем случае.

Второе следствие, которое выходит из того, что JRebel не перезапускает конструкторы, это то, что при добавлении нового поля в класс будет присвоено значение “по умолчанию” для данного типа. Т.е. если добавить поле, тип которого не будет примитивом, то присвоенное значение будет null, что в общем случае может повлечь за собой NullPointerException, в случае если это поле будет разыменовано для существующего объекта.
Буду дебажить обычным методом)
Всем спасибо
Стандартным HCS максимум что ты можешь изменять - код внутри методов и конструкторов. При любом другом изменение придется перезапускать. С JRebel изменять можно практически все, кроме статически инициализируемых элементов. А с плагином под Forge можно даже динамично перезагружать текстуры и json

plugin_in_action.gif
 
1,137
5
3
F3+S поможет. Мне надо методы грузить
Oldestkon, попробую, отпишусь
 
Сверху