Отладка 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.