簡體   English   中英

Java調試器:進程間通信如何完成?

[英]Java debugger: how is the inter-process communication done?

我知道您可以調試以“調試模式”啟動的遠程JVM(遠程JVM打開一個TCP端口以與調試器進行通信)。

我的問題是,當調試不是遠程而是本地時,該通信如何完成? 例如,當您使用IDE啟動應用程序以在本地對其進行調試時。 IDE在獨立的進程中啟動JVM,然后如何完成進程間通信(例如,對於Windows)? 是否也通過TCP端口完成?

這取決於托管操作系統。 在Windows上,調試器將使用共享內存,並且有很多其他方法可以在各種OS上進行連接: http : //download.oracle.com/javase/6/docs/technotes/guides/jpda/conninv.html

在早期版本中,除非在Windows上,否則將默默使用TCP。

但是,詳細信息是特定於供應商的,並且如果您要實現可在另一種協議上使用的連接器,則Sun VM允許您實現自己的連接器: http : //download.oracle.com/javase/1.5.0/docs/指南/ JPDA / JDI / COM /陽光/ JDI /連接/ SPI / TransportService.html

根據JDB Docs ,您可以指定傳輸參數。

C:> java -agentlib:jdwp = transport = dt_shmem ,address = jdbconn,server = y,suspend = n

Windows下 ,可以為每個共享內存的通訊指定dt_shmem

從下面的鏈接:

-Xrunjdwp: transport = dt_socket ,address = myhost:8000

在Unix / Linux下(在Win下也可以使用),調試器和VM按套接字進行通信。

更多示例: http : //download.oracle.com/javase/1.4.2/docs/guide/jpda/conninv.html

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

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

java -Xrunjdwp:help

暫無
暫無

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

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