我知道如何用Eclipse调试远程Java VM,但是如何使用Java Web Start程序来完成它。我遇到的问题只出现在Java Web Start中。它必须与安全相关。
我需要一个适用于当前Java VM的解决方案,如1.6.0_12。
答案 0 :(得分:24)
与您要远程调试的任何其他Java进程完全相同:您必须为VM(-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345
)设置一些参数,然后连接到给定端口。在Java webstart 6.0中,可以使用-J选项在早期版本中通过环境变量JAVAWS_VM_ARGS来完成。详情请见here。
答案 1 :(得分:23)
手动启动JWS VM。这样您就可以提供启动参数来打开调试端口。这是一个description,它是这样的:
set JAVAWS_TRACE_NATIVE=1
set JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws http://server:port/descriptor.jnlp
答案 2 :(得分:15)
对于较新版本的Java(Java 8u20 +和Java 7u70 +),我遇到像-Xrunjdwp这样的参数不能直接传递,也不能使用JAVAWS_VM_ARGS。
信息
Rejecting attempt to specify insecure property: -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
开始出现在控制台输出中。
对我有用的唯一解决方案是将这些参数传递给JAVA_TOOL_OPTIONS系统变量。
答案 3 :(得分:9)
您还可以使用-J选项
为javaws可执行文件提供debug参数示例:
javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp
答案 4 :(得分:4)
您需要执行以下操作:
启用调试Java的参数(可选但有用,即tls / ssl握手问题为close_notify或handshake_failure)&启动JNLP,有两种方法可以做到:
2.A。下载JNLP文件并从命令行执行(在这种特殊情况下不需要SET
命令。)
set JAVA_TOOL_OPTIONS=-Djavax.net.debug=all
javaws -wait jnlp.jnlp
2.b中。在Java控制面板中为JVM添加参数(即-Djavax.net.debug=all
)> Java>查看(在此特定情况下不需要),并从浏览器启动JNLP文件:
日志和跟踪位于Java Deployment Home的log
目录中,我将粘贴这些位置:
一个。 Windows XP:%HOME%\Application Data\Sun\Java\Deployment
湾Windows 7 / Vista:%APPDATA%\..\LocalLow\Sun\Java\Deployment
℃。 Linux / Solaris:%HOME%/.java/deployment
使用javax.net.debug = all,如果从https连接加载jnlp中的jar,您将看到握手。这类问题很难调试。
...
%% No cached client session
*** ClientHello, TLSv1.2
...
***
...
Java Web Start Main Thread, received EOFException: error
Java Web Start Main Thread, handling exception: javax.net.ssl.SSLHandshakeException: Remote host closed connection during handshake
Java Web Start Main Thread, SEND TLSv1.2 ALERT: fatal, description = handshake_failure
Java Web Start Main Thread, WRITE: TLSv1.2 Alert, length = 2
Java Web Start Main Thread, called closeSocket()
#### Java Web Start Error:
答案 5 :(得分:2)
使用Java 8和Windows 10,打开命令提示符(cmd.exe)并键入:
set JAVAWS_TRACE_NATIVE=1
set JAVA_TOOL_OPTIONS=-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000
javaws java-app.jnlp
答案 6 :(得分:1)
您是否尝试过打印调试日志?无论如何这都是有用的,在这种情况下可能会有所帮助。
如果您想要真正的调试,请参阅例如这里: How can I debug under WebStart?
答案 7 :(得分:1)
要在Linux中调试Web Start应用程序,请在调试模式下使用javaws调用创建一个shell脚本〜/ bin / javaws-debug.sh,如上所述:
〜/斌/ javaws-debug.sh:
#!/bin/sh
export JAVAWS_TRACE_NATIVE=1
export JAVAWS_VM_ARGS="-Xdebug -Xnoagent -Djava.compiler=NONE
-Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=n"
javaws "$@"
然后,在浏览器中,选择该脚本作为要在jnlp文件上调用的应用程序。
例如,在Firefox中,转到编辑→首选项→应用程序,内容类型:Java Web Start,然后在操作中选择“使用其他”,并从“选择助手应用程序”对话框中选择脚本。在Chrome中,您需要更改Linux系统设置。在KDE中,转到系统设置→文件关联,已知类型:application:x-java-jnlp-file,添加一个新的Application,从“选择Application for application / x-java”中选择〜/ bin / javaws-debug.sh -jnlp-file“对话框。
配置完浏览器后,Java Web Start应用程序将开始使用您的包装器,这将使调试器能够在端口8989上连接。
答案 8 :(得分:1)
您可以在启用调试的情况下运行JNLP:
javaws -Xnosplash -J-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5009 <application>.jnlp
输出: 收听地址为5009的运输dt_socket
通过您最喜欢的IDE附加此功能,我使用IntelliJ IDEA 运行>附加以处理