2010-10-19 25 views
5

我一直試圖在JPDA上下文中將兩個客戶端調試器連接到 Debuggee程序失敗。這有可能或 是否有解決方法,使其發生?將多個調試器連接到一個惡魔(Java,JPDA)

我使用eclipse作爲IDE(編輯錯字)。 認爲一個服務器程序作爲一個Hello World 打印出的:

System.out.println("I have the String"); //1 
System.out.println("You will have to pass through the breakpoints before you shall see"); 
System.out.println("breakpoints"); 
System.out.println("before you shall see"); //4 

我們可以把斷點的線1和4

第1步: 傳遞到運行配置程序中的PARAMS:

-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y 

server=y告訴VM表現得像一個服務器,suspend=y意味着直到調試器鎖存到它PROG執行將被掛起) 並運行該程序。

第2步:進入Debug as , Debug config ,Remote Java application和 創建一個新的實例:

Project: Same as before 
Connection type: Socket Attach(Socket Attach) 
Host:LocalHost 
Port:8000 

現在,當我調試PROG停止執行指定斷點。 我不能做的是創建這個遠程調試器的另一個實例, 可以鎖定到服務器(編1),當我這樣做時,我得到一個連接被拒絕。讓我知道是否有其他人遇到了這個問題 以及是否存在解決方法。 謝謝!

由於

+0

如果它是可行的(我真的認爲它不是),那麼除了一個調試器充當主人,其他人只是跟隨它觀察過程如何在斷點處停下來,發現異常等c。(至少我想不出有什麼好用,但我有興趣瞭解更多) – Fredrik 2010-10-19 22:28:29

+0

fwiw,像你描述的那樣擁有單獨的視圖,對我來說似乎很有用。在使用jdb進行調試時,打開幾個獨立的jdb窗口是非常好的,一個用於控制,一個用於觀察一些變量,一個用於觀察堆棧跟蹤等。這將允許命令行調試更類似於Eclipse有多個窗口。 – NHDaly 2017-05-03 15:42:32

回答

1

AFAIK只能有一個連接到任何給定的時間的Java程序的調試器的實例。一旦開始編寫調試程序,Eclipse將連接到調試程序,阻止所有其他連接嘗試。如果你想遠程連接,你可以運行程序而不是在調試模式下,並且手動添加參數到手動輸入java參數: -Xdebug -Xrunjdwp:transport = dt_socket,address = 8000,server = y,suspend = y 能夠與另一個調試器連接。

+0

其核心思想是允許在同一個服務器進程中調試互斥線程,手動嘗試獲取拒絕連接。是否有一個現有的協議,允許在新的端口上監聽,如果請求進入正在服務另一個請求的現有端口?(編輯標點符號)感謝您對Yuval和Fredrick的評論。 – javaresearcher 2010-10-19 23:09:29

+0

此外,我碰到:http://download.oracle.com/javase/6/docs/technotes/guides/jpda/jpda_spis.html#TransportDev談論開發TransportService以支持多個併發連接到單個偵聽器地址。現在另一個問題是有沒有人做出這個或企圖? – javaresearcher 2010-10-19 23:22:08

+0

@javaresearcher在接受連接後繼續監聽端口不是問題。這裏的問題是它會使整個調試過程非常不直觀。有點像在每個座位前面駕駛一輛帶有三名乘客的汽車和一組方向盤和踏板。只有一個人能夠在任何時候控制住,否則事情會變得非常糟糕。我認爲如果你試圖解釋你爲什麼要這樣做會更有意義。也許有更好的方法來做你想做的事。 (編輯:現在請參閱您的熱門評論中的「核心思想」,但爲什麼兩個調試器?) – Fredrik 2010-10-20 06:06:07

0

這對服務器共享環境很有用。假設你正在開發一個巨大的服務器應用程序,並且只有一個測試服務器。所有開發人員都部署到同一個共享服務器在這種情況下,有多個調試連接是合理的。

這對於利用OSGI的服務器應用程序尤其有意義。每個開發人員將編碼,部署,停止,啓動和調試不同的模塊。

+0

如果兩個開發人員在調試同一個模塊會發生什麼? – 2014-05-15 09:03:39

0

我不知道2010年的情況如何,但在2014年這是可行的。我正在調試一個applet和一個servlet,同時事實上他們使用不同的JVM,這樣做只需在eclipse中啓動遠程調試進程就好像套接字Listen,啓動第一個java應用程序:

-Xdebug -Xrunjdwp :運輸= dt_socket,地址= 127.0.0。1:8787,暫停= Y

然後啓動相同的Eclipse遠程調試過程,並使用相同的選項啓動另一個Java進程,你應該看到的進程都會產生這樣的:

debug in eclipse

你可以看到兩個不同的JVM在相同的端口監聽(從不知道'applet'進程的名稱)

相關問題