eclipse
Jak działa zdalne debugowanie Eclipse za kulisami
Szukaj…
Jak działa zdalne debugowanie Eclipse za scenami
Debugowanie środowiska Eclipse rozpoczyna się od tak zwanego agenta.
JVM , który uruchamia zgodne źródła .class
, ma funkcję, która umożliwia wstrzykiwanie bibliotek zewnętrznych (napisanych w Javie lub C ++) do JVM, prawie w czasie wykonywania. Te biblioteki zewnętrzne są nazywane agentami i mogą modyfikować zawartość uruchomionych plików .class
. Agenci ci mają dostęp do funkcjonalności JVM, która nie jest dostępna z poziomu zwykłego kodu Java działającego wewnątrz JVM i mogą być używane do robienia interesujących rzeczy, takich jak wstrzykiwanie i modyfikowanie działającego kodu źródłowego, profilowanie itp. Narzędzia takie jak JRebel korzystają z ten element funkcjonalności pozwalający osiągnąć magię.
Aby przekazać Agent Lib do JVM, robisz to za pomocą argumentów startowych, używając
agentlib:libname[=options] format.
W rzeczywistości przekazaliśmy Agenta Lib o nazwie jdwp
do maszyny JVM z uruchomionym programem Tomcat. jdwp
jest specyficzną dla JVM, opcjonalną implementacją JDWP (Java Debug Wire Protocol), która jest używana do definiowania komunikacji między debuggerem a działającą JVM. Jest to implementacja, jeśli jest dostarczana jako natywna biblioteka JVM jako jdwp.so
lub jdwp.dll
Co to robi?
Mówiąc najprościej, przekazywany przez nas agent jdwp w zasadzie pełni funkcję łącza między instancją JVM z uruchomioną aplikacją a Debuggerem (który może być zdalny lub lokalny). Ponieważ jest to biblioteka agentów, ma ona zdolność przechwytywania działającego kodu, tworzenia pomostu między maszyną JVM a debuggerem oraz funkcji debugera stosowanej w maszynie JVM. Ponieważ w architekturze JVM funkcja debugowania nie znajduje się w samej JVM, ale jest abstrakcyjna w zewnętrznych narzędziach (które są trafnie nazywane debuggerami), narzędzia te mogą znajdować się na lokalnym komputerze z uruchomioną debugowaną maszyną JVM lub zostać uruchomione z jestem maszyną zewnętrzną. Jest to ta rozprzężona, modułowa architektura, która pozwala nam mieć JVM działającą na zdalnym komputerze i używając JDWP, mieć zdalny debugger, który może się z nim komunikować.
Krótko mówiąc, tak działa debugger Eclipse.