【问题标题】:What is the default properties that eclipse uses to launch a java process in its debugging mode?eclipse 在调试模式下启动 java 进程的默认属性是什么?
【发布时间】:2010-04-16 20:12:47
【问题描述】:

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

【问题讨论】:

    标签: java eclipse jdb


    【解决方案1】:

    怎么样

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

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

    【讨论】:

    • 这不能回答问题:Java 程序的行为会有所不同,具体取决于它是在 Eclipse 中使用“运行”还是“调试”启动...所以问题仍然存在:有什么区别,命令选项准确吗?
    【解决方案2】:

    我研究了 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 provides authoritative information on the agentlib start-up options)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-08
      • 1970-01-01
      • 2014-03-04
      • 2022-01-14
      • 2019-04-02
      • 2011-12-11
      • 2020-03-04
      • 2011-02-28
      相关资源
      最近更新 更多