1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем php5master, 11 май 2018.

  1. Автор темы
    php5master

    php5master Активный участник Пользователь

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

    Ну и это всё, сложного ничего нет. Чтобы вам не казалось всё так радужно, я написал нюансы, замеченные мной при работе с этой штукой.
    • Весь долитый код через дебаг сохраняется в ОЗУ. Выключили сервер - этого кода на сервере больше нету.
    • IDE доливает только те классы, которые были изменены начиная от последней доливки. Поэтому рекомендую перед закрытием IDE стопнуть сервер и скомпилировать плагин.
    • В spigot.yml заметил на вид нужный пункт "debug:". Дак вот он вкл/выкл не дебаг, а логированние дебага сервером. Как по мне, это абсолютно бесполезно, как было false, так и оставил
     
    Последнее редактирование: 11 май 2018
  2. TheZefirrkka

    TheZefirrkka Активный участник Пользователь

    Баллы:
    76
  3. demkom

    demkom Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    G_demkom_G
    Орнул.
     
  4. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    С еклипсом неробит чет. Продолжу юзать PlugMan.
    Failed to connect to remote VM. Connection refused.
    Connection refused: connect
     
    Последнее редактирование: 12 май 2018
  5. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    В idea робит все давно
     
  6. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    А с какой версии это появилось в spigot?
     
  7. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    А с еклипсом тогда что не так?
     
  8. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Ващет это стандартный атач jvm. Так можно любое приложение дебажить.
     
  9. hyndorik

    hyndorik Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    В интелии все норм))
     
  10. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Тебя заклинило?
     
  11. Exception_Prototype

    Exception_Prototype Активный участник Пользователь

    Баллы:
    96
    Да, чёт тупанул, думал эта какая то специальная фича)0
     
  12. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
  13. OsipXD

    OsipXD Старожил Пользователь

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    И откуда вообще взялся этот бред:
    При чём тут Spigot? Какая еще сырая фича? Как уже писал @alexandrage выше так можно делать с чем угодно.
     
  14. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Забей. Это даже не его статейка. Скомуниздил у буржуев тему сто летней давности и перевел.
     
  15. Krutius

    Krutius Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    MrPencilBox
    Дополню.

    https://www.spigotmc.org/wiki/intellij-debug-your-plugin/
     
  16. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Несколько моментов для тех, кто хочет дебажить на удалённом хосте.
    Возможно это поможет и @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

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

    InterWall Старожил Пользователь

    Баллы:
    173
    У телнет есть пароль, но проблема — передаётся он в открытом виде. Там ещё были другие проблемы в безопасности, рекомендую погуглить.
     
  18. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Мне казалось, что у JDWP есть опциональное поле secret, но сейчас глянул в доки — оказалось, нету.
    Тогда для удалённой отладки всё-таки более правильным (с точки зрения безопасности) способом будет проброс JDWP порта через ssh туннель.
     
  19. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Накидал в соседней теме maven-plugin, который скачает серверный jar с Yive's Mirror, накидает нужное в чистую папку и запустит в ней сервер с вашим плагином. Огонь удобно.
    Попозже серию скринов замучу.
     
  20. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Код:
    chcp 1251
    :a
    java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=4400 -Xmx1536M -jar %1
    pause
    goto a
    А дальше цепляюсь к процессу из IDE. И не нужно никаких настроек в каких то гуищах - достаточно самому запустить сервер ручками.
    А что ещё нужно - так это менеджер плагинов. Без него действительно тяжко в случаях извлечения кода в отдельную функцию и изменения схем.
     

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