如何在Java Web Start(JNLP)下debugging应用程序?

我知道如何使用Eclipsedebugging远程Java VM,但是如何使用Java Web Start程序来完成。 我有一个问题,只发生在Java Web Start中。 它必须是安全相关的。

我需要一个解决scheme,可以使用当前的Java VM,如1.6.0_12。

这与您想要远程debugging的任何其他Java进程完全相同:您必须为VM设置一些参数( -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=n,suspend=y,address=12345 )然后连接到给定的端口。 在Java webstart 6.0中,可以通过环境variablesJAVAWS_VM_ARGS在早期版本中使用-J选项来完成。 在这里看到细节。

手动启动JWS VM。 这样你可以提供启动参数来打开debugging端口。 这是一个描述 ,它是这样的:

 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 

至于较新版本的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开始显示在控制台输出中。

我唯一的解决scheme是将这些parameter passing给JAVA_TOOL_OPTIONS系统variables。

您还可以使用-J选项将debugging参数提供给javaws可执行文件

例:

 javaws.exe -J-Xdebug -J-Xnoagent -J-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8000 http://server:port/descriptor.jnlp 

你有没有尝试打印debugging日志? 无论如何,这是一件有用的事情,在这种情况下可能会有所帮助。

如果你想真正的debugging,请参阅例如这里: 我怎样才能在WebStart下debugging?

在Java 8和Windows 10中,打开命令提示符(cmd.exe)并input:

 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 

要在Linux中debuggingWeb Start应用程序,请在debugging模式下使用javaws调用创build一个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 "$@" 

然后,在浏览器中,select该脚本作为要在jnlp文件上调用的应用程序。

例如,在Firefox中,转到编辑→首选项→应用程序,内容types:Java Web Start,然后在操作中select“使用其他”,然后从“select帮助程序应用程序”对话框中select脚本。 在Chrome中,您需要更改Linux系统设置。 在KDE中,进入系统设置→文件关联,已知types:application:x-java -jnlp-file,添加一个新的应用程序,从“Choose application for application / x-java”中select〜/ bin / javaws-debug.sh -jnlp-file“对话框。

一旦你的浏览器被configuration,Java Web Start应用程序将开始使用你的包装器,这将使debugging器连接到端口8989。

您将需要执行以下操作:

  1. 在Java控制面板>高级中启用Java日志和跟踪。 Java控制面板:日志和跟踪

  2. 启用debuggingJava的参数(可选,但有用的问题,如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控制面板> Java>视图中为JVM添加参数(即-Djavax.net.debug=all )(这不是必需的),并从浏览器启动JNLP文件:

    Java控制面板:jvm参数

  3. 日志和跟踪位于Java Deployment Home的log目录中,粘贴这些位置的位置:

    一个。 Windows XP: %HOME%\Application Data\Sun\Java\Deployment

    湾 Windows 7 / Vista: %APPDATA%\..\LocalLow\Sun\Java\Deployment

    C。 Linux / Solaris: %HOME%/.java/deployment

使用javax.net.debug =如果jnlp中的jar从https连接加载,您将看到握手。 这类问题很难debugging。

 ... %% 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: