Java调试器:进程间通信是如何完成的?

时间:2011-06-27 13:01:46

标签: java eclipse intellij-idea debugging

我知道您可以调试远程JVM,以“调试模式”启动它(远程JVM打开TCP端口与调试器通信)。

我的问题是,当调试不是远程但本地时,如何完成此通信?例如,当您使用IDE启动应用程序以在本地调试它时。 IDE在一个独立的进程中启动JVM,然后如何完成这个进程间通信(例如在Windows的情况下)?它是通过TCP端口完成的吗?

4 个答案:

答案 0 :(得分:2)

这取决于托管操作系统。在Windows上,调试器将使用共享内存,并且有许多替代方法可以连接各种操作系统: 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/guide/jpda/jdi/com/sun/jdi/connect/spi/TransportService.html

答案 1 :(得分:1)

根据JDB Docs,您可以指定传输参数。

  

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

Windows 下,您可以指定dt_shmem进行每shared memory

的通信

从以下链接:

  

-Xrunjdwp:的运输= dt_socket 下,地址=为myhost:8000

在Unix / Linux下(在Win下运行),调试器和VM按插槽进行通信。

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

答案 2 :(得分:1)

通常,JDWP(JavaTM调试线协议传输接口)没有定义传输机制(套接字,串行线路,共享内存......),而是在调试对象进程和调试器前端之间传输的信息和请求的格式-结束。对于特定的实现,您应该查看其文档。例如,SUN VM支持两种模式:TCP / IP和共享内存。

答案 3 :(得分:0)

对于Sun JVM,有two modes:共享内存和TCP / IP。您可以使用

列出选项
java -Xrunjdwp:help