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

时间:2013-02-21 22:23:04

标签: java debugging applet remote-debugging jnlp

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

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

5 个答案:

答案 0 :(得分:3)

similar SO question,我找到了以下答案......

有时为了调试一些安全相关的东西,浏览器插件环境与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 Plug-in

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

点击“新建”按钮。

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

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

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:0)

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


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

答案 3 :(得分:0)

我有一个解决方法。看起来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文件夹。我甚至尝试过一些注册表黑客攻击(改变路径)。

答案 4 :(得分:0)

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