eclipse
Как удаленная отладка Eclipse работает за кулисами
Поиск…
Как работает Eclipse Remote Debugging за пределами возможностей
Отладка Eclipse начинается с того, что называется агентом.
JVM , который запускает подчиненные источники .class
имеет функцию, которая позволяет встраивать библиотеки извне (написанные на Java или C ++) в JVM, почти во время выполнения. Эти внешние библиотеки называются агентами, и у них есть возможность изменять содержимое файлов .class
. Эти агенты имеют доступ к функциям JVM, которые недоступны из обычного Java-кода, запущенного внутри JVM, и их можно использовать для создания интересных вещей, таких как инъекция и изменение исходного кода, профилирование и т. Д. Такие инструменты, как JRebel, используют эта часть функциональности для достижения своей магии.
И чтобы передать агент Lib в JVM, вы делаете это путем запуска аргументов, используя
agentlib:libname[=options] format.
Фактически мы передавали агент Lib по имени jdwp
в JVM, работающий с Tomcat. jdwp
представляет собой специфическую JVM, необязательную реализацию JDWP (Java Debug Wire Protocol), который используется для определения связи между отладчиком и запущенной JVM. Это реализация, если присутствует в качестве jdwp.so
библиотеки JVM как jdwp.so
или jdwp.dll
Так что же он делает?
Проще говоря, агент jdwp, который мы передаем, в основном служит функцией связи между экземпляром JVM, запускающим приложение, и отладчиком (который может быть расположен как удаленно, так и локально). Так как это библиотека агентов, у нее есть возможность перехватить запущенный код, создать мост между JVM и отладчиком и использовать функциональность отладчика, применяемого к JVM. Поскольку в JVM-архитектуре функциональность отладки не найдена в самой JVM, но отвлечена на внешние инструменты (которые точно называются отладчиками), эти инструменты могут либо находиться на локальной машине, на которой JVM отлаживается, либо запускается из am внешний машина. Именно эта несвязанная модульная архитектура позволяет нам запускать JVM на удаленном компьютере и использовать JDWP, чтобы удаленный отладчик мог общаться с ним.
Короче говоря, так работает отладчик Eclipse.