目前,我所拥有的唯一信息是浏览器状态栏中的单行错误消息.
你知道如何获得堆栈跟踪吗?
除了明显使用Java控制台和applet查看器之外,从Java 6 update 7开始,您可以使用JDK附带的VisualVM(JDK_HOME/bin/visualvm).它允许您查看每个线程的堆栈跟踪,甚至可以查看所有对象实例.
AppletViewer非常方便,您可以从Eclipse运行"Run as/Java Applet",或者"Debug As/Java Applet"来调试您的applet类.
但是,有时为了调试一些安全相关的东西,浏览器插件环境与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源的项目.
这篇文章有点陈旧但仍然相关(包括标题为"如何在Java插件中调试Applet"的部分).
编辑:获得堆栈跟踪的更好方法是使用Java插件控制台.如果您在该窗口中点击"t",您将看到以下内容:
打印出所有现有的线程组.显示的第一组是Group main.ac代表活动计数; 它是线程组及其子线程组中活动线程的总数.agc代表活跃的群体计数; 它是线程组的活动子线程组的数量.pri代表优先权; 它是线程组的优先级.在Group main之后,其他线程组将显示为Group,其中name是与applet关联的URL.单个线程列表将显示线程名称,线程优先级,如果线程处于活动状态,则为活动状态;如果线程处于被销毁状态,则显示为已销毁;如果线程为守护程序线程,则为守护程序.
我在该控制台中经常使用的另一个命令是0-5的跟踪级别:
这将设置跟踪级别选项,如下一节" 跟踪和日志记录"中所述.
从该页面,您将看到级别如下所示:
0 - 关
1 - 基本
2 - 网络,缓存和基本
3 - 安全,网络和基础
4 - 扩展,安全,网络和基础
5 - LiveConnect,扩展,安全性,网络,临时和基本
这些工具都非常有用,因为你试图解开世界上你的小程序的头部.我知道他们为我工作过.