【问题标题】:Remote debugging java web start under JVM 1.8JVM 1.8下远程调试java web start
【发布时间】:2014-10-31 06:30:00
【问题描述】:

我有一个 Java Web Start 应用程序,我曾经通过快捷方式启动它:

"C:\Program Files\Java\jdk1.7.0_67\bin\javaws.exe" -J-Dfile.encoding=UTF-8 -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=8200" http://xxx/yyy/zzz.jnlp

但是在安装 JDK 1.8 后它全部停止工作,我的 javaws 看不到任何额外的 X||D 参数。 我试过这样:

setenv JAVAWS_VM_ARGS "-Dfile.encoding=UTF-8 -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=8200"
"C:\Program Files\Java\jdk1.8.0_25\bin\javaws.exe" http://pont/dms/InstallDMS_debug.jnlp

但没用。

我找到的唯一解决方案是使用 Java 控制面板设置参数,将它们直接添加到 JVM。

Control Panel > Java > Java (tab) > View (button) > Runtime parameters (field)

如何为 1.8 旧方式设置参数?

附: JDK 1.6 x32 仍然适用于快捷方式。 x64 1.7 启动但引用 1.8 库,所以我认为所有 JDK x64 都在勾结。

【问题讨论】:

  • 我遇到了类似的问题。那么您是否设法通过控制面板使其工作?你到底在里面输入了什么作为运行时参数?
  • nm,我在控制面板中使用以下 jvm 参数让它工作:-Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=y
  • 是的。我也这样做了。
  • 但我找到了另一种方法。安装 1.7 并设置与 Windows XP SP3 的快捷方式兼容性。

标签: java debugging jvm java-web-start jnlp


【解决方案1】:

从(大约)1.7.0_022 版本开始,java web start 启动器显着改变了提供的 JVM 参数和属性列表,将它们中的大部分视为不安全的。

您可以在运行 JNLP 文件之前使用上述调试开关而不是 java 控制面板参数设置 JAVA_TOOL_OPTIONS 环境变量。 (见http://www.oracle.com/technetwork/java/javase/envvars-138887.html#gbmsyhttp://docs.oracle.com/javase/8/docs/platform/jvmti/jvmti.html#tooloptions)。这是对之前伊万回答的更正。

例如,您可以尝试以下已针对 JDK 1.8.0_60 测试的批处理文件:

setlocal

set JAVAWS_TRACE_NATIVE=1
set JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,address=8002,server=y,suspend=n %JAVA_TOOL_OPTIONS%

set JAVA_HOME_64=c:\Java\64\jdk1.8
set JAVA_HOME=%JAVA_HOME_64%
set JDK_JRE_HOME=%JAVA_HOME%\jre
set JRE_HOME=%JDK_JRE_HOME%

set ONLINE_JNLP_URL=http://pont/dms/InstallDMS_debug.jnlp

"%JRE_HOME%\bin\javaws" %ONLINE_JNLP_URL%

endlocal

另外,我想注意的是,对于 Java WS 应用程序的远程调试,必须运行 JDK 的 JRE 而不是公共 JRE,否则您可以观察到 JVM 在执行主类之前终止。

【讨论】:

    【解决方案2】:

    公然盗用 Saeid Nourian 的评论答案:

    -Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=y 添加到 Java 控制面板中的参数中。

    【讨论】:

    • 是的,它有效,但它是一种丑陋的解决方案。如果我需要同时调试两个不同的应用程序,我做不到。
    • 哦,我同意,这很丑陋。 (虽然可以调试两个应用程序,但更丑陋 - 启动一个,在控制面板中更改端口号,然后启动另一个。)
    • 您需要查看此答案。它有一个很小的,很难看到的错误。它可能会误导人们。
    【解决方案3】:

    毕竟它仍然适用

    set JAVA_TOOLS=-agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=y
    

    在 bat 文件中。

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-10
      • 2014-11-20
      • 1970-01-01
      相关资源
      最近更新 更多