我知道您可以调试远程JVM,以“调试模式”启动它(远程JVM打开TCP端口与调试器通信)。
我的问题是,当调试不是远程但本地时,如何完成此通信?例如,当您使用IDE启动应用程序以在本地调试它时。 IDE在一个独立的进程中启动JVM,然后如何完成这个进程间通信(例如在Windows的情况下)?它是通过TCP端口完成的吗?
答案 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