Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап Debug вашего плагина в IntelliJ IDEA

php5master

Активный участник
Пользователь
Баллы
66
Мало кто знает, что Spigot имеет такую фичу для тестирования плагина под названием Plugin Debug. Если коротко и простыми словами, то вся её суть в том, что вы нажимаете ТОЛЬКО одну кнопочку, и через 2 секунды вы можете тестировать свой плагин. Фича ещё сырая, нет 100%-й гарантии, что она заработает именно у вас, однако попробовать стоит.
Ну вот и сама инструкция:
0) Сначала нам нужно скомпилировать и поместить в plugins тот плагин, который вы хотите тестировать через дебаг.
1) В IDE заходим в Run -> Edit Configurations...
gEpINsz.png
2) Жмём плюсик -> Remote.
fplT002.png
3) Оставляем всё, как есть(Name - исключение), если когда тут были и что-то тыкали, можете настройки с картинки взять. Копируем первую строчку(под названием Command line...), жмём Apply, OK.
y0BMRoq.jpg
4) Заходим в папку с сервером, вставляем в запускатор сервера перед "-jar spigot.jar" то, что скопировали выше.
5) Запускаем сервер, ждём до "Done".
6) Когда вы добавили наш сервер в IDE, вверху справа должна появиться небольшая панель. На ней выбираем сервер(если не выбран) и жмём на зелёного жучка, тем самым соединяя IDE с локальным сервером.
Lj94oAF.jpg
7) Ну и каждый раз, когда вы хотите что-то протестировать в процессе написания плагина, нажимайте на зелёную стрелку вниз на этой же панели. Потом проверяете то, что вам надо.

Ну и это всё, сложного ничего нет. Чтобы вам не казалось всё так радужно, я написал нюансы, замеченные мной при работе с этой штукой.
  • Весь долитый код через дебаг сохраняется в ОЗУ. Выключили сервер - этого кода на сервере больше нету.
  • IDE доливает только те классы, которые были изменены начиная от последней доливки. Поэтому рекомендую перед закрытием IDE стопнуть сервер и скомпилировать плагин.
  • В spigot.yml заметил на вид нужный пункт "debug:". Дак вот он вкл/выкл не дебаг, а логированние дебага сервером. Как по мне, это абсолютно бесполезно, как было false, так и оставил
 
Последнее редактирование:
Мало кто знает, что Spigot имеет такую фичу для тестирования плагина под названием Plugin Debug. Если коротко и простыми словами, то вся её суть в том, что вы нажимаете ТОЛЬКО одну кнопочку, и через 2 секунды вы можете тестировать свой плагин. Фича ещё сырая, нет 100%-й гарантии, что она заработает именно у вас, однако попробовать стоит.
Орнул.
 
С еклипсом неробит чет. Продолжу юзать PlugMan.
Failed to connect to remote VM. Connection refused.
Connection refused: connect
 
Последнее редактирование:
И откуда вообще взялся этот бред:
Мало кто знает, что Spigot имеет такую фичу для тестирования плагина под названием Plugin Debug. Если коротко и простыми словами, то вся её суть в том, что вы нажимаете ТОЛЬКО одну кнопочку, и через 2 секунды вы можете тестировать свой плагин. Фича ещё сырая, нет 100%-й гарантии, что она заработает именно у вас, однако попробовать стоит.
При чём тут Spigot? Какая еще сырая фича? Как уже писал @alexandrage выше так можно делать с чем угодно.
 
И откуда вообще взялся этот бред:

При чём тут Spigot? Какая еще сырая фича? Как уже писал @alexandrage выше так можно делать с чем угодно.
Забей. Это даже не его статейка. Скомуниздил у буржуев тему сто летней давности и перевел.
 
Несколько моментов для тех, кто хочет дебажить на удалённом хосте.
Возможно это поможет и @alexandrage.

Для проверки достаточно использовать telnet:

1) telnet localhost 5005 - если соединяет (лично у меня при этом ошибка "Escape character is ^]"), значит, как минимум, поднялся отладочный сервер. В ином случае всё плохо, проверяйте аргументы запуска сервера

2) telnet <внешний IP> 5005 - если не соединяет - см. три пункта ниже. Если соединяет, из IDE тоже должно работать

Для настройки подключения из внешки:

1) Порт нужно указывать > 1024, либо запускать сервер из-под рута (что не рекомендуется).
Соотстветнно для 5005 можно использовать юзера без дополнительных прав

2) Необходимо убедиться, что у целевого порта есть доступ в сеть - конфигурируем фаервол

3) Для запуска сервера с доступом в т.ч. внешний интерфейс пришлось принудительно указать:
address=0.0.0.0:5005

Единственная проблема в том, что к этом отладочному серверу могут подключиться все. На уровне его протокола нельзя установить какой-либо пароль для подключения. Максимум настраивать фаервол под себя или включать дебаг только в нужный момент. Оба варианта довольно сомнительные.
Может у кого есть другие предложения?
 
Несколько моментов для тех, кто хочет дебажить на удалённом хосте.
Возможно это поможет и @alexandrage.

Для проверки достаточно использовать telnet:

1) telnet localhost 5005 - если соединяет (лично у меня при этом ошибка "Escape character is ^]"), значит, как минимум, поднялся отладочный сервер. В ином случае всё плохо, проверяйте аргументы запуска сервера

2) telnet <внешний IP> 5005 - если не соединяет - см. три пункта ниже. Если соединяет, из IDE тоже должно работать

Для настройки подключения из внешки:

1) Порт нужно указывать > 1024, либо запускать сервер из-под рута (что не рекомендуется).
Соотстветнно для 5005 можно использовать юзера без дополнительных прав

2) Необходимо убедиться, что у целевого порта есть доступ в сеть - конфигурируем фаервол

3) Для запуска сервера с доступом в т.ч. внешний интерфейс пришлось принудительно указать:
address=0.0.0.0:5005

Единственная проблема в том, что к этом отладочному серверу могут подключиться все. На уровне его протокола нельзя установить какой-либо пароль для подключения. Максимум настраивать фаервол под себя или включать дебаг только в нужный момент. Оба варианта довольно сомнительные.
Может у кого есть другие предложения?
У телнет есть пароль, но проблема — передаётся он в открытом виде. Там ещё были другие проблемы в безопасности, рекомендую погуглить.
 
Мне казалось, что у JDWP есть опциональное поле secret, но сейчас глянул в доки — оказалось, нету.
Тогда для удалённой отладки всё-таки более правильным (с точки зрения безопасности) способом будет проброс JDWP порта через ssh туннель.
 
Накидал в соседней теме maven-plugin, который скачает серверный jar с Yive's Mirror, накидает нужное в чистую папку и запустит в ней сервер с вашим плагином. Огонь удобно.
Попозже серию скринов замучу.
 
Код:
chcp 1251
:a
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4400 -Xmx1536M -jar %1
pause
goto a
А дальше цепляюсь к процессу из IDE. И не нужно никаких настроек в каких то гуищах - достаточно самому запустить сервер ручками.
А что ещё нужно - так это менеджер плагинов. Без него действительно тяжко в случаях извлечения кода в отдельную функцию и изменения схем.
 

Поделиться этой страницей

Назад
Верх