Как Eclipse отлаживает код на сервере приложений? - PullRequest
6 голосов
/ 05 декабря 2008

Какая связь происходит между Eclipse и моим сервером приложений (JBoss), когда я запускаю сервер из Eclipse в режиме отладки? Как это работает?

Ответы [ 3 ]

12 голосов
/ 05 декабря 2008

Когда вы запускаете сервер в режиме отладки, он прослушивает указанный порт TCP. Eclipse подключается к этому порту, и они общаются по протоколу Java Debug Wire Protocol (JDWP). Читайте подробности здесь: http://java.sun.com/j2se/1.5.0/docs/guide/jpda/

5 голосов
/ 05 декабря 2008

Я думаю, что это называется JDWP (Java Debugging Wire Protocol) - подробнее здесь

0 голосов
/ 15 декабря 2015

Отладка Eclipse начинается с того, что называется агентами.

JVM, которая запускает собранные исходники .class, имеет функцию, позволяющую извлекать внешние библиотеки (написанные на Java или C ++) в JVM, практически во время выполнения. Эти внешние библиотеки называются агентами и имеют возможность изменять содержимое запущенных файлов .class. Эти агенты имеют доступ к функциональности JVM, которая недоступна из обычного Java-кода, работающего внутри JVM, и их можно использовать для выполнения интересных вещей, таких как внедрение и изменение исполняемого исходного кода, профилирование и т. Д. Такие инструменты, как JRebel, используют этот кусок функциональности, чтобы достичь своей магии.

И чтобы передать Agent Lib в JVM, вы делаете это с помощью аргументов запуска, используя

 agentlib:libname[=options] format.

На самом деле мы передавали агента Lib с именем jdwp JVM под управлением Tomcat. Jdwp - это специфическая JVM, необязательная реализация JDWP (Java Debug Wire Protocol), которая используется для определения связи между отладчиком и работающей JVM. Это реализация, если она имеется в виде собственной библиотеки JVM в виде jdwp.so или jdwp.dll

Так, что это делает? Проще говоря, агент jdwp, который мы передаем, в основном выполняет функцию связи между экземпляром JVM, на котором выполняется приложение, и отладчиком (который может быть расположен как удаленный, так и локальный). Поскольку это библиотека агентов, у нее есть возможность перехватывать работающий код, создавать мост между JVM и отладчиком и применять функциональность отладчика, применяемого к JVM. Поскольку в архитектуре JVM функциональность отладки не обнаруживается в самой JVM, а абстрагируется от внешних инструментов (которые удачно называются отладчиками), эти инструменты могут находиться либо на локальном компьютере, на котором выполняется отлаживаемая JVM, либо запускаться с внешней машины. Именно эта разделенная модульная архитектура позволяет нам запускать JVM на удаленной машине и использовать JDWP, а также иметь возможность удаленного отладчика общаться с ним.

Вот как работает отладчик Eclipse.

...