如何调试 Java 小程序?
目前,我唯一拥有的信息是浏览器状态栏中的一行错误消息。
例如,你知道我如何获得堆栈跟踪吗?
目前,我唯一拥有的信息是浏览器状态栏中的一行错误消息。
例如,你知道我如何获得堆栈跟踪吗?
除了Java控制台和小程序查看器的明显使用之外,从Java 6 update 7开始,您还可以使用JDK附带的VisualVM(JDK_HOME/bin/visualvm)。它允许您查看每个线程的堆栈跟踪,甚至查看所有对象实例。
AppletViewer非常方便,你可以从Eclipse做一个“Run as / Java Applet”来运行,或者“Debug As / Java Applet”来调试你的小程序类。
但是,有时要调试一些与安全相关的东西,浏览器插件环境与appletviewer太大不同。以下是在浏览器中有效调试小程序可以执行的操作:
1) 获取二进制文件的调试信息
从JRE_HOME/lib备份.jar文件
(下载和)为与 JRE 相同的版本安装 JDK。
将.jar文件从 JDK_HOME/jre/lib 复制到 JRE_HOME/lib
JDK 中的文件是在包含调试信息(源代码行号信息、变量名称等)的情况下编译的,JRE 文件没有此信息。
否则,您将无法在调试器中有意义地单步执行核心类代码。
2) 为 Java 插件启用调试
转到 Java 控制面板 / Java / Java 运行时设置 / 视图 / 用户 / 运行时参数
并添加选项以启用调试。像这样:
-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=n
有趣的选项是端口(在这里使用2502,你几乎可以使用任何自由端口,只需将其写下来供以后使用)和挂起 - 如果您需要调试小程序启动,类加载等,请将其设置为“y”。这样,当您访问小程序页面时,浏览器将显示为冻结,因为JVM立即挂起,等待调试器连接。
3) 使用您喜欢的 IDE 远程调试 Java 插件
例如,在 Eclipse 中,选择“运行/调试配置...”/“远程 Java 应用程序”。
单击“新建”按钮。
确保连接类型为“套接字连接”,如果您的浏览器是本地的,请选择 localhost 作为主机,以及您之前选择的端口(示例中为 2502)。
您可能必须在 JDK 的“源”选项卡上插入 src.zip,才能使 Java 核心类源可用。
保存配置,一旦浏览器运行插件(JVM已挂起或未挂起),请运行远程调试器以连接到插件JVM,并打开包含小程序源代码的项目。
这篇文章有点旧,但仍然相关(包括标题为“如何在Java插件中调试小程序”的部分)。
编辑:也许获取堆栈跟踪的更好方法是使用Java插件控制台。如果您在该窗口中点击“t”,您将看到以下内容:
打印出所有现有线程组。显示的第一个组是组主组。ac 代表活动计数;它是线程组及其子线程组中活动线程的总数。agc 代表活动组计数;它是线程组的活动子线程组的数量。pri 代表优先级;它是线程组的优先级。在组 main 之后,其他线程组将显示为 组 ,其中 name 是与小程序关联的 URL。线程的单个列表将显示线程名称、线程优先级(如果线程处于活动状态)或(如果线程处于销毁过程中)处于活动状态;如果线程是守护程序线程,则显示守护程序。
我最常从该控制台使用的另一个命令是从 0 到 5 的跟踪级别:
这将设置跟踪级选项,如下一节跟踪和日志记录中所述。
从该页面中,您将看到级别如下所示:
- 0 — 关闭
- 1 — 基本
- 2 — 网络、缓存和基本
- 3 — 安全、网络和基础
- 4 — 扩展、安全、网络和基本
- 5 — LiveConnect、扩展、安全性、网络、临时和基本
这些工具都非常有用,因为您正在尝试解开世界上已经进入小程序头部的内容。我知道他们为我工作过。