我知道你可以調試一個以「調試模式」啓動它的遠程JVM(遠程JVM打開一個TCP端口與調試器通信)。Java調試器:進程間通信是如何完成的?
我的問題是,當調試是不是遠程但本地時,這個通信是如何完成的?例如,當您使用IDE啓動應用程序以在本地進行調試時。 IDE在一個獨立的進程中啓動JVM,然後這個進程間通信是如何完成的(例如在Windows中)?它是否也通過TCP端口完成?
我知道你可以調試一個以「調試模式」啓動它的遠程JVM(遠程JVM打開一個TCP端口與調試器通信)。Java調試器:進程間通信是如何完成的?
我的問題是,當調試是不是遠程但本地時,這個通信是如何完成的?例如,當您使用IDE啓動應用程序以在本地進行調試時。 IDE在一個獨立的進程中啓動JVM,然後這個進程間通信是如何完成的(例如在Windows中)?它是否也通過TCP端口完成?
這依賴於主機操作系統。在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
根據JDB Docs,您可以指定傳輸參數。
C:>的java -agentlib:JDWP = 運輸= dt_shmem,地址= jdbconn,服務器= Y,暫停= N
在的Windows,你可以在每次通信指定dt_shmem shared memory
從下面的鏈接:
-Xrunjdwp:運輸= dt_socket,地址=爲myhost:8000
在Unix/Linux的(溫下工作以及)調試器和VM每套接字通信。
例子: http://download.oracle.com/javase/1.4.2/docs/guide/jpda/conninv.html
通常,JDWP(JavaTM調試有線協議傳輸接口)沒有定義傳輸機制(套接字,串行線,共享內存,...),而是信息和請求傳輸的格式在調試對象進程和調試器前端之間傳遞。對於特定的實現,你應該看看它的文檔。例如,SUN VM支持兩種模式:TCP/IP和共享memeory。
對於Sun JVM,有two modes:共享內存和TCP/IP。您可以列出選項使用
java -Xrunjdwp:help
是否意味着Windows(和其他人)提供了一個「API」,讓獨立進程通過共享RAM內存進行通信?我以前只是通過文件系統或套接字來實現進程間通信。 – edutesoy
我從來沒有嘗試過使用它,但看看這裏:http://msdn.microsoft.com/en-us/library/aa366551(v=vs.85).aspx –