【问题标题】:remote debugging a jnlp application with eclipse使用 eclipse 远程调试 jnlp 应用程序
【发布时间】:2009-11-05 00:24:45
【问题描述】:

我正在调试一个 jnlp 应用程序,以前可以通过 eclipse 远程调试它,但现在不行了。

启动它的命令是:

 /usr/java/jdk1.6.0_14/jre/bin/java -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=1445 -Djnlpx.heapsize=64m,512m -DtrustProxy=true -Xverify:remote -Djava.security.policy=/lib/security/javaws.policy -Dfile.encoding=UTF-8 -Xbootclasspath/a:/usr/java/jdk1.6.0_14/jre/lib/deploy.jar:/usr/java/jdk1.6.0_14/jre/lib/javaws.jar:/usr/java/jdk1.6.0_14/jre/lib/plugin.jar -classpath /usr/java/jdk1.6.0_14/jre/lib/deploy.jar com.sun.javaws.Main launch.jnlp
Listening for transport dt_socket at address: 1445

问题是,当我附加 Eclipse 调试器时,它会关闭并重新启动;所以调试器附加到第一个进程;当它死掉时,调试器也会死掉。

调试器脚本实际上并不重要;因为如果 suspend=n ,jnlp 进程会在调试器启动之前自行重新启动。

我尝试过跟踪它,但选项 -XX:TraceSupport=true(以及我尝试过的其他变体)会导致 jvm 错误。

我正在使用 Fedora 11,面向 Web 开发人员的 Eclipse Java EE IDE。 (内部版本号:20090621-0832)

我在问是否有人知道如何解决这个问题,或者至少如何打开更好的日志记录(即,将所有控制台输出捕获到日志中;这样我就可以查看第一个闪烁的控制台在我的屏幕上停留一毫秒)

谢谢!

【问题讨论】:

    标签: java eclipse debugging jnlp


    【解决方案1】:

    这个blog post 有环境变量,你可以设置它来调试jnlp。这一直对我有用。

      set JAVAWS_TRACE_NATIVE=1
    
      set JAVAWS_VM_ARGS=-Xdebug -Xnoagent -Djava.compiler=NONE 
                -Xrunjdwp:transport=dt_socket,address=8989,server=y,suspend=y
      javaws http://server:port/descriptor.jnlp
    

    【讨论】:

    【解决方案2】:

    我的老板找到了答案:

    看来“<property>” 标签 在 jnlp 文件中更具限制性 使用较新的 JRE。根据 Sun documentation:

    “对于不受信任的应用程序,系统 JNLP 文件中设置的属性将 仅由 Java Web Start 设置,如果它们 被认为是安全的,或者如果 属性名称以“jnlp”开头。或者 “javaws。”

    看起来像是不受信任的状态 导致应用程序启动 第二次与适当的 属性。

    在重新编译并修复了一个希望不相关的问题(换行符导致签名的 APPLICATION.JNLP 和 launch.jnlp 看起来不“相同”)后,调试器现在可以工作了。

    【讨论】:

    • 太棒了!您的评论帮助我找到了自己的问题。看起来 JNLP 被下载或解析了两次,具体取决于不受信任的状态。第二次使用的是中设置的参数。所以我需要在 HREF 中添加我所有的请求参数,它终于可以工作了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2014-08-13
    • 2012-08-04
    • 2014-07-25
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2020-03-10
    • 2013-12-23
    相关资源
    最近更新 更多