java - JVM 1.8下远程调试java web start

标签 java debugging jvm java-web-start jnlp

我有一个 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 都是串通一气。

最佳答案

从(大约)版本 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 )。这是对之前 Ivan 的回答的更正。

例如,您可以尝试以下针对 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 而不是公共(public) JRE 是必不可少的,否则您可以观察到 JVM 在执行主类之前终止。

关于java - JVM 1.8下远程调试java web start,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26668723/

相关文章:

Java - 为什么方法不显示?

java - Java应用程序中的内存泄漏

java - 如何将所有值保存在内存中,并使用命令查看它们,就像在Matlab中调试一样

shell - KornShell - 全局设置 "-x"(调试)标志?

java - 对于垃圾收集来说,如果我们将对象设为 null 并在方法结束时使用后清除收集,这是个好主意

java - ExifInterface : Skip the tag entry since tag number is not defined, 压缩图片时

java - 当我通过 CLI 发出 Maven 命令时,如何使用 Maven 调试 Intellij 2018.3.2

security - Grails 和运行时动态修改

java - 如何更改一个 Gradle 任务/项目的 JVM 选项?

java - switch case 中的多个值/将 ifs 转换为 switch 语句