在JVM 1.8下远程调试Java Web Start

12

我有一个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好老的方式设置参数?

P.S. JDK 1.6 x32仍可使用快捷方式。x64 1.7启动但引用了1.8库,因此我认为所有JDK x64都在勾结中。


我遇到了类似的问题。那么你是否通过控制面板设法使其工作?你在运行时参数中究竟输入了什么? - Saeid Nourian
1
我明白了,我使用控制面板中的以下JVM参数使其正常工作:-Xdebug -agentlib:jdwp=transport=dt_socket,address=9999,server=y,suspend=y。 - Saeid Nourian
没错。我也是这么做的。 - Ivan Tamashevich
但我找到了另一种方法。安装1.7并将快捷方式兼容性设置为Windows XP SP3。 - Ivan Tamashevich
3个回答

8

从大约版本1.7.0_022开始,Java Web Start启动器会显著改变所提供的JVM参数和属性列表,将其中大部分视为不安全。

在运行JNLP文件之前,您可以使用上述描述的调试开关设置JAVA_TOOL_OPTIONS环境变量,而不是使用Java控制面板参数。(请参阅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而不是公共JRE至关重要,否则您可能会观察到JVM在执行主类之前终止。


7

直接抄袭Saeid Nourian的回答:

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


是的,它可以工作,但这种解决方案有点丑陋。如果我需要同时调试两个不同的应用程序,我就做不到了。 - Ivan Tamashevich
2
哦,我同意,这很丑陋。(虽然调试两个应用程序是可能的,但更加丑陋——启动一个,更改控制面板中的端口号,再启动另一个。) - Sbodd
你需要检查一下这个答案。它有一个小错误,很难被发现。它可能会误导人们。 - djangofan

5

毕竟它仍然可以正常工作

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

在批处理文件中。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接