Il debug di Eclipse inizia con ciò che viene definito come agenti.
La JVM, che esegue le origini ".class" soddisfatte, ha una funzione che consente di iniettare in JVM librerie esterne (scritte in Java o C++) durante il runtime. Queste librerie esterne sono indicate come agenti e hanno la possibilità di modificare il contenuto dei file .class eseguiti. Questi agenti hanno accesso alle funzionalità della JVM che non sono accessibili da un normale codice Java in esecuzione all'interno della JVM e possono essere utilizzate per fare cose interessanti come iniettare e modificare il codice sorgente in esecuzione, la profilazione ecc. Alcuni strumenti come JRebel (usato per la sostituzione a caldo del codice) utilizza questa funzionalità per ottenere la loro magia.
E per passare un Lib agente ad una JVM, lo fa tramite start up argomenti, utilizzando la -
agentlib:libname[=options]
Stavamo passando un agente di nome Lib JDWP alla JVM in esecuzione di Tomcat. Jdwp è un'implementazione specifica JVM opzionale del JDWP (Java Debug Wire Protocol) che viene utilizzata per definire la comunicazione tra un debugger e una JVM in esecuzione. È l'implementazione, se presente viene fornita come libreria nativa della JVM come jdwp.so o jdwp.dll
Quindi cosa fa? In termini semplici, l'agente jdwp che passiamo serve fondamentalmente la funzione di essere un collegamento tra l'istanza JVM che esegue un'applicazione e un Debugger (che può trovarsi sia remoto che locale).Poiché è una libreria di agenti, ha la capacità di intercettare il codice in esecuzione, creare un ponte tra la JVM e un debugger e avere la funzionalità di un debugger applicata sulla JVM. Poiché nell'architettura JVM, la funzionalità di debug non si trova all'interno della JVM stessa ma viene estratta in strumenti esterni (che vengono definiti correttamente come debugger), questi strumenti possono risiedere sulla macchina locale che esegue la JVM in fase di debug o di esecuzione. da una macchina esterna. È questa architettura modulare disaccoppiata che ci consente di avere una JVM in esecuzione su una macchina remota e l'utilizzo del JDWP, di avere un debugger remoto in grado di comunicare con essa.
Ecco come funziona Eclipse debugger in breve.
fonte
2016-01-12 19:33:04
Grazie, è stata una lettura utile. Solo per interesse proverò ad usare la libreria jdi.jar per vedere direttamente il debug in azione. –
@manuel, se hai tempo e pazienza, dai un'occhiata al codice sorgente di JSwat (http://code.google.com/p/jswat/). È costruito sulla piattaforma Netbeans e funge da applicazione front-end per quanto riguarda JPDA. Devo ammettere che non ho esaminato le fonti. –