Java 设置用于小程序启动的默认JVM参数

Java 设置用于小程序启动的默认JVM参数,java,debugging,applet,remote-debugging,jnlp,Java,Debugging,Applet,Remote Debugging,Jnlp,我正在尝试远程调试Java小程序,但似乎无法使-agentlib:jdwp JVM参数正常工作。我尝试在Java控制面板中为使用的特定JRE指定它,并且尝试通过用于启动小程序的JNLP文件设置它 为小程序启动设置JVM参数的正确方法是什么?特别是远程调试。您确实需要在浏览器中运行小程序吗?因为调试小程序的常规方法是使用 根据JPDA文档(我假设您已经阅读过,基于您已经尝试过的内容),您应该能够在Java控制面板中指定代理。我从未尝试过这种方法,而且文档声称您不能以这种方式中断小程序的启动(只需

我正在尝试远程调试Java小程序,但似乎无法使-agentlib:jdwp JVM参数正常工作。我尝试在Java控制面板中为使用的特定JRE指定它,并且尝试通过用于启动小程序的JNLP文件设置它


为小程序启动设置JVM参数的正确方法是什么?特别是远程调试。

您确实需要在浏览器中运行小程序吗?因为调试小程序的常规方法是使用


根据JPDA文档(我假设您已经阅读过,基于您已经尝试过的内容),您应该能够在Java控制面板中指定代理。我从未尝试过这种方法,而且文档声称您不能以这种方式中断小程序的启动(只需连接到正在运行的小程序),所以我所能做的就是祝您好运。

看着一个,我找到了以下答案

有时为了调试一些与安全相关的东西,浏览器插件环境与appletviewer太不一样了。以下是在浏览器中有效调试小程序的方法:

1)获取二进制文件的调试信息

从JRE_HOME/lib备份.jar文件

(下载并)安装与JRE版本相同的JDK

将.jar文件从JDK_HOME/jre/lib复制到jre_HOME/lib

JDK中的文件编译时包含调试信息(源代码行号信息、变量名等),而JRE文件没有这些信息

没有这一点,您将无法在调试器中有意义地进入核心类代码

2)启用Java插件的调试

转到Java控制面板/Java/Java运行时设置/View/User/Runtime参数

并添加选项以启用调试。大概是这样的:

-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=n
有趣的选项是端口(这里使用2502,您可以使用几乎任何空闲端口,只需写下来供以后使用)和挂起-如果您需要调试小程序启动、类加载等,请将其设置为“y”。这样,当您访问小程序页面时,浏览器将显示为冻结状态,因为JVM将立即挂起,等待调试器连接

3)使用您喜爱的IDE远程调试Java插件

例如,在Eclipse中,选择运行/调试配置…/远程Java应用程序

点击“新建”按钮

确保连接类型为“Socket Attach”,如果浏览器是本地的,则选择localhost作为主机,并选择前面选择的端口(示例中为2502)

您可能必须在JDK的sources选项卡上嵌入src.zip,才能获得Java核心类源代码


保存配置,在浏览器运行插件(JVM是否挂起)后,运行远程调试器连接到插件JVM,打开包含小程序源的项目。

我有一个解决方法。似乎是JRE7_u21没有打开端口,没有挂起,jconsole VM summary没有显示Java控制面板中配置的VM参数

我降级到JRE7_u17,一切正常。Java控制面板中的我的VM参数字符串是:

 -agentlib:jdwp=transport=dt_socket,address=8889,server=y,suspend=y,quiet=n,timeout=10000  
它似乎在没有压力的情况下起作用

 -Djava.compiler=NONE

其他方法都不起作用,甚至没有像前面建议的那样替换lib文件夹。我甚至尝试了一些注册表黑客(更改路径)。

您可以使用环境变量传递默认的JVM参数。它会将参数传递给浏览器中运行的小程序(而不仅仅是小程序)。这种方法甚至可以在java 7u21及更高版本上使用。

这个问题已经在7_u40上得到了解决,7_u40可以在java.net上进行早期访问。否则Oracle bug会说这是针对Java8修复的


是的,小程序与RAP应用程序紧密耦合运行。它绝对必须在浏览器中运行。我认为评论应该是答案,而答案应该是评论。谢谢分享!我或多或少都在尝试这个。控制台报告它得到了参数,但小程序没有挂起,也没有响应调试器连接。我对帖子进行了编辑,澄清了如何使用w/7进行操作,但它已被调节,因此尚未显示。简短回答:try-Djava.compiler=NONE-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=2502我刚刚试过,@Zach,它似乎对我不起作用。至少你让它工作了,对吧?是的!我让它工作。我必须通过运行bin/javacpl.exe(而不是真正的控制面板)来设置JVM参数,如果suspend=n,它就不起作用。如果suspend=y,则所有小程序都会停止,直到附加了调试器。请参阅我对的回答。这是最新版本的插件JVM中刚刚发生的事情。简而言之,您可以为javaw.exe设置参数,但这些参数永远不会传递到java.exe,而java.exe实际上是在浏览器插件中运行的。您可以在Windows上通过使用process Explorer检查JVM进程来验证这一点。FWIW,我已经在这个问题上向Oracle提交了一个bug。