eclipse
Hur Eclipse Remote Debugging fungerar bakom kulisserna
Sök…
Hur fungerar Eclipse Remote Debugging bakom kulisserna
Eclipse-felsökning börjar med det som kallas agenter.
JVM , som kör de efterlevda .class
har en funktion som gör att externt bibliotek (skrivna i antingen Java eller C ++) kan injiceras i JVM, bara om körtid. Dessa externa bibliotek kallas agenter och de har förmågan att ändra innehållet i .class
filerna som har körts. Dessa agenter har tillgång till JVM: s funktionalitet som inte är tillgänglig från en vanlig Java-kod som körs inuti JVM och de kan användas för att göra intressanta saker som att injicera och modifiera den löpande källkoden, profilering etc. Verktyg som JRebel använder sig av denna bit av funktionalitet för att uppnå sin magi.
Och för att skicka en Agent Lib till en JVM, gör du det via startargumenter med hjälp av
agentlib:libname[=options] format.
Vi överförde faktiskt en Agent Lib med namnet jdwp
till JVM som kör Tomcat. jdwp
är en JVM-specifik, valfri implementering av JDWP (Java Debug Wire Protocol) som används för att definiera kommunikation mellan en felsökare och en JVM som körs. Det är implementering, om det finns som ett inbyggt bibliotek för JVM som antingen jdwp.so
eller jdwp.dll
Så vad gör det?
Enkelt uttryckt tjänar jdwp-agenten vi passerar i princip funktionen att vara en länk mellan JVM-instansen som kör en applikation och en Debugger (som kan vara antingen fjärr eller lokal). Eftersom det är ett Agent Library, har det förmågan att fånga upp körkoden, skapa en bro mellan JVM och en felsökare och ha funktionaliteten för en felsökare tillämpad på JVM. Eftersom felsökningsfunktionen i JVM-arkitekturen inte finns i själva JVM utan abstraheras bort till externa verktyg (som lämpligen kallas felsökare) kan dessa verktyg antingen ligga på den lokala maskinen som kör JVM som felsöks eller körs från am extern maskin. Det är denna avkopplade, modulära arkitektur som gör att vi kan ha en JVM som körs på en fjärrmaskin och använda JDWP, så att en fjärrfelsökare kan kommunicera med den.
Kort sagt, det här är hur Eclipse debugger fungerar.