在调试模式下,eclipse用于启动java进程的默认属性是什么?

时间:2010-04-16 20:12:47

标签: java eclipse jdb

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

2 个答案:

答案 0 :(得分:2)

怎么样

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

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

答案 1 :(得分: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

.......

使用“Debug 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(... option address=localhost:NNNN和隐式默认选项server=n)。 (... Oracle provides authoritative information on the agentlib start-up options

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