Eclipse Remote Debugging 如何在場景後面工作

Eclipse 除錯從所謂的代理開始。

執行已編譯的 .class 源的 JVM 具有允許將外部庫(用 Java 或 C++編寫)注入 JVM 的功能,幾乎就是執行時。這些外部庫稱為代理,它們能夠修改已執行的 .class 檔案的內容。這些代理可以訪問 JVM 的功能,這些功能無法在 JVM 內部執行的常規 Java 程式碼中訪問,它們可用於執行有趣的操作,如注入和修改正在執行的原始碼,分析等工具,如 JRebel 使用這一功能實現了他們的魔力。

要將 Agent Lib 傳遞給 JVM,可以通過啟動引數,使用

 agentlib:libname[=options] format.

我們實際上是將名為 jdwp 的 Agent Lib 傳遞給執行 Tomcat 的 JVM。jdwpJDWP(Java 除錯線協議) 的 JVM 特定可選實現,用於定義偵錯程式和正在執行的 JVM 之間的通訊。它的實現,如果存在,作為 jdwp.sojdwp.dll 的 JVM 的本機庫提供

那它是做什麼用的?

簡單來說,我們傳遞的 jdwp 代理基本上是服務於執行應用程式的 JVM 例項和偵錯程式(可以位於遠端或本地)之間的連結的功能。由於它是一個代理庫,它確實能夠攔截正在執行的程式碼,在 JVM 和偵錯程式之間建立一個橋樑,並具有在 JVM 上應用偵錯程式的功能。由於在 JVM 體系結構中,除錯功能在 JVM 本身中找不到,而是被抽象為外部工具(可稱為偵錯程式),這些工具可以駐留在執行正在除錯的 JVM 的本地機器上,也可以執行來自外部機器。正是這種去耦合的模組化架構允許我們在遠端機器上執行 JVM 並使用 JDWP,
簡而言之,這就是 Eclipse 偵錯程式的工作原理。