繁体   English   中英

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

[英]Set default JVM parameters to be used for applet launch

我正在尝试远程调试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及更高版本上运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM