簡體   English   中英

Eclipse如何在應用程序服務器中調試代碼?

[英]How does Eclipse debug code in an application server?

當我在Eclipse中以調試模式運行服務器時,Eclipse和我的應用程序服務器(JBoss)之間正在進行什么通信? 這是如何運作的?

以調試模式啟動服務器時,它將偵聽指定的TCP端口。 Eclipse連接到該端口,並使用Java調試線協議(JDWP)進行通信。 請在此處閱讀詳細信息: http//java.sun.com/j2se/1.5.0/docs/guide/jpda/

我認為它叫做JDWP(Java Debugging Wire Protocol) - 在這里閱讀更多內容

Eclipse調試從所謂的代理開始。

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

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

 agentlib:libname[=options] format.

我們實際上是將一個名為jdwp的Agent Lib傳遞給運行Tomcat的JVM。 jdwp是JDWP(Java調試線協議)的JVM特定可選實現,用於定義調試器和正在運行的JVM之間的通信。 它的實現,如果存在作為JVM的本機庫提供為jdwp.so或jdwp.dll

那它是做什么的? 簡單來說,我們傳遞的jdwp代理基本上是服務於運行應用程序的JVM實例和調試器(可以位於遠程或本地)之間的鏈接的功能。 由於它是一個代理庫,它確實能夠攔截正在運行的代碼,在JVM和調試器之間創建橋梁,並且具有在JVM上應用調試器的功能。 由於在JVM體系結構中,在JVM本身中找不到調試功能,而是將其抽象為外部工具(適當地稱為調試器),這些工具可以駐留在運行正在調試的JVM的本地計算機上,也可以運行來自外部機器。 正是這種去耦合的模塊化架構允許我們在遠程機器上運行JVM並使用JDWP,讓遠程調試器能夠與之通信。

這就是Eclipse調試器的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM