gpt4 book ai didi

java - 如果有两个JVM 启动,如何调试applet?

转载 作者:搜寻专家 更新时间:2023-10-31 20:34:35 26 4
gpt4 key购买 nike

我需要通过打开浏览器窗口来调试由另一个 java 应用程序 (webstart) 启动的小程序。它在旧版本的 java 上运行良好,但对于 Java 1.7_45,调试仅适用于第一个 JVM(即 webstart 应用程序)。

我在 jcontrol 中使用这些参数:

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086

我认为这没什么问题,因为调试器正确附加。唯一的问题是,我只能调试 webstart 应用程序,而不能调试之后运行的小程序。

在 webstart 应用程序和小程序的控制台中显示:

Java Plug-in 10.45.2.18
Using JRE version
1.7.0_45-b18 Java HotSpot(TM) 64-Bit Server VM

JNLP java进程从我在jcontrol中设置的agentlib选项开始:

/usr/lib/jvm/java-7-oracle/jre/bin/java -Xmx512m -Xms128m 
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086
-Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar
-classpath /usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar
-Djnlpx.vmargs="-Xmx512m -Xms128m
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=8086"
-Djnlpx.jvm=/usr/lib/jvm/java-7-oracle/jre/bin/java
....

当我打开一个我想从此 webstart 应用程序进行调试的小程序时,将打开 firefox 中的新选项卡并启动三个进程:

/opt/firefox/plugin-container /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libnpjp2.so -greomni /opt/firefox/omni.ja -appomni /opt/firefox/browser/omni.ja -appdir /opt/firefox/browser 13665 true plugin

/usr/lib/jvm/java-7-oracle/jre/bin/java -D__jvm_launched=8315888593 -D__applet_launched=8315738716 -Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar -Djava.class.path=/usr/lib/jvm/java-7-oracle/jre/classes -Dsun.awt.warmup=true sun.plugin2.main.client.PluginMain write_pipe_name=/tmp/.com.sun.deploy.net.socket.13900.6946726655044877700.AF_UNIX

/usr/lib/jvm/java-7-oracle/jre/bin/java -D__jvm_launched=8317712180 -D__applet_launched=8315738716 -Xbootclasspath/a:/usr/lib/jvm/java-7-oracle/jre/lib/deploy.jar:/usr/lib/jvm/java-7-oracle/jre/lib/javaws.jar:/usr/lib/jvm/java-7-oracle/jre/lib/plugin.jar -Djava.class.path=/usr/lib/jvm/java-7-oracle/jre/classes -Djnlpx.session.data=/tmp/session6916520025949955515 -Dsun.awt.warmup=true sun.plugin2.main.client.PluginMain write_pipe_name=/tmp/.com.sun.deploy.net.socket.13900.3102318208570708149.AF_UNIX

如您所见,调试端口没有作为参数传递给执行小程序的命令

我已经尝试将新的调试参数添加到 applet 标签(我已经尝试了 Xdebug 和 agentlib),但它什么也没做:

<param name="java_arguments" value="-Djnlp.packEnabled=true -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8087">

我也尝试过使用 appletviewer,在解决了 pack200 库的问题后,我陷入了这个异常:

java.lang.NoClassDefFoundError: netscape/javascript/JSException
at java.lang.Class.getDeclaredConstructors0(Native Method)

但我不认为这是一种解决方案,因为 appletviewer 不能与 pack200 一起使用,而且我必须向服务器添加重复的库。

是否有可能:

  1. 为 webstart 应用程序和插件定义单独的 jdwp 端口?
  2. 两者在同一个端口上监听?
  3. 选择调试将用于哪一个?

我在 Linux 上使用 64 位 oracle JDK 1.7.0_45-b18 和 64 位 Firefox。

最佳答案

不是真正的解决方案,但有解决我的问题的方法。

  • 清除jcontrol中的java参数
  • 启动 webstart 应用程序
  • 再次添加java参数
  • 运行小程序

之后,参数只传递给小程序,调试工作。

关于java - 如果有两个JVM 启动,如何调试applet?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20908730/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com