2011-06-27 58 views
2

我知道你可以調試一個以「調試模式」啓動它的遠程JVM(遠程JVM打開一個TCP端口與調試器通信)。Java調試器:進程間通信是如何完成的?

我的問題是,當調試是不是遠程但本地時,這個通信是如何完成的?例如,當您使用IDE啓動應用程序以在本地進行調試時。 IDE在一個獨立的進程中啓動JVM,然後這個進程間通信是如何完成的(例如在Windows中)?它是否也通過TCP端口完成?

回答

2

這依賴於主機操作系統。在Windows調試器將使用共享內存和存在的連接各種OS'es的替代方法一大堆: http://download.oracle.com/javase/6/docs/technotes/guides/jpda/conninv.html

在早期版本中,TCP會悄悄地使用,除非在Windows ...

但是,詳細信息是供應商特定的,如果您想要實現一個適用於另一種協議的連接器,Sun VM允許您實現自己的連接器:http://download.oracle.com/javase/1.5.0/docs/guide/jpda/jdi/com/sun/jdi/connect/spi/TransportService.html

+0

是否意味着Windows(和其他人)提供了一個「API」,讓獨立進程通過共享RAM內存進行通信?我以前只是通過文件系統或套接字來實現進程間通信。 – edutesoy

+0

我從來沒有嘗試過使用它,但看看這裏:http://msdn.microsoft.com/en-us/library/aa366551(v=vs.85).aspx –

1

通常,JDWP(JavaTM調試有線協議傳輸接口)沒有定義傳輸機制(套接字,串行線,共享內存,...),而是信息和請求傳輸的格式在調試對象進程和調試器前端之間傳遞。對於特定的實現,你應該看看它的文檔。例如,SUN VM支持兩種模式:TCP/IP和共享memeory。

0

對於Sun JVM,有two modes:共享內存和TCP/IP。您可以列出選項使用

java -Xrunjdwp:help