设置要用于applet启动的默认JVM参数

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

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

看一个类似的SO问题 ,我找到了以下答案……

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

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

从JRE_HOME / lib备份.jar文件

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

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

JDK中的文件是使用包含的调试信息(源代码行号信息,变量名等)编译的,而JRE文件没有此信息。

如果没有这个,你将无法在调试器中有意义地进入核心类代码。

2)启用Java Plug-in的调试

转到Java控制面板/ Java / Java运行时设置/视图/用户/运行时参数

并添加选项以启用调试。 像这样的东西:

-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=n 

有趣的选项是端口(在这里使用2502,你可以使用几乎任何自由端口,只需将其写下来以供以后使用)和暂停 – 如果你需要调试applet启动,类加载等,将其设置为“y” 。 这样,当您访问applet页面时,浏览器似乎会冻结,因为JVM会立即暂停,等待调试器连接。

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

例如,在Eclipse中,选择Run / Debug Configurations … / Remote Java Application

单击“新建”按钮。

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

您可能必须在源选项卡上的JDK中包含src.zip以使Java核心类源可用。

保存配置,一旦浏览器运行插件(JVM挂起或未挂起),运行远程调试器连接到插件JVM,并打开包含applet源的项目。

此问题已针对7_u40修复,可在java.net上进行早期访问。 否则Oracle错误说这是针对Java 8修复的!

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8016005

http://jdk7.java.net/download.html

你绝对需要在浏览器中运行applet吗? 因为调试applet的常规方法是使用appletviewer 。


根据JPDA文档(我假设您已经阅读过,基于您已经尝试过的内容),您应该能够在Java控制面板中指定代理。 我从来没有尝试过这个,并且文档声称你不能以这种方式中断applet启动(只需附加到正在运行的applet),所以我所能做的就是祝你好运。

我有一个解决方法。 看起来JRE7_u21没有打开端口,也没有挂起,jconsole VM摘要没有显示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文件夹。 我甚至试过一些注册表黑客攻击(改变路径)。

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