3

我想使用命令行调试器连接到由 eclipse 启动的 java 进程,但不确定 eclipse 启动的 java 进程的默认属性是什么?我不介意使用套接字连接,但不确定会慢多少?

4

2 回答 2

2

怎么样

-Xdebug -Xnoagent -agentlib:jdwp=transport=dt_socket,suspend=n,address=localhost:12345

然后您可以将 java 调试器附加到端口 12345

于 2010-04-16T20:22:30.280 回答
0

我调查了 Eclipse 中“运行”和“调试”之间 Java 应用程序启动的差异。我使用 Sysinternals 的 Process Explorer 查看了 Eclipse 在使用任一选项启动 Java 应用程序时分叉的 Java 进程的命令行。(我在 Windows 7 系统上)

使用“运行 HelloWorld”

"C:\Program Files (x86)\Java\jdk1.7.0_07\jre\bin\javaw.exe" -Dfile.encoding=Cp1252 -classpath C:\workspace-juno\HelloWorld\bin com.example.HelloWorld

…………

使用“调试 HelloWorld”

"C:\Program Files (x86)\Java\jdk1.7.0_07\jre\bin\javaw.exe" -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:2404 -Dfile.encoding=Cp1252 -classpath C:\workspace-juno\HelloWorld\bin com.example.HelloWorld

(地址端口在随后的调用中发生了变化,例如,它address=localhost:2564在下一次调用时发生了变化。)
因此,java(或 javaw)实际上以不同的选项启动,具体取决于使用的是“运行”还是“调试”:“调试”启动添加了一个附加agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:NNNN选项。这是将 JVM 置于可调试模式的标准方法。HelloWorld 程序将首先等待其调试器成功连接到它,然后再继续(选项suspend=y)。HelloWorld JVM 将自动连接到在地址 localhost:NNNN 上运行的某个调试器(... 选项address=localhost:NNNN和隐式默认选项server=n)。(... Oracle 提供有关agentlib启动选项的权威信息)

Eclipse 本身将充当提供端口 NNNN 的调试器应用程序。HelloWorld JVM 将通过其自己的编号为 NNNN+1 的端口连接到此端口(可以使用 Process Explorer 在该进程的 TCP/IP 选项卡上查看该进程使用的端口)。

于 2012-09-09T19:07:13.993 回答