你如何调试Java小程序?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (28)

目前,我拥有的唯一信息是浏览器状态栏中的单行错误消息。

你知道我怎么能得到一个堆栈跟踪例如?

提问于
用户回答回答于

本文有点旧,但仍然相关(包括题为“如何在Java插件中调试Applets”的小节)。

编辑:或许一个更好的方式来获取堆栈跟踪是使用Java插件控制台。如果您在该窗口中点击“t”,您将看到以下内容:

打印出所有现有的线程组。显示的第一组是组主。ac代表活动计数; 它是线程组及其子线程组中活动线程的总数。agc代表活动组数; 它是一个线程组的活动子线程组的数量。pri代表优先; 它是线程组的优先级。在Group main之后,其他线程组将显示为Group,其中name是与applet关联的URL。单独的线程列表将显示线程名称,线程优先级,如果线程处于活动状态,则线程处于活动状态;如果线程处于被销毁的状态,则线程处于活动状态;如果线程处于守护进程线程,则线程处于后台进程。

我在该控制台中最常用的另一个命令是0-5的跟踪级别:

这将设置跟踪级别的选项,如下一节“ 跟踪和日志记录”中所述。

从该页面,您会看到这些关卡如下所示:

  • 0 - 关闭
  • 1 - 基本
  • 2 - 网络,缓存和基本
  • 3 - 安全,网络和基础
  • 4 - 扩展,安全,网络和基础
  • 5 - LiveConnect,扩展,安全,网络,温度和基本

这些工具可能都是非常有用的,因为你试图解开世界上已经进入applet头部的东西。我知道他们为我工作。

用户回答回答于

除了明显使用Java控制台和applet查看器外,从Java 6 update 7开始,您可以使用JDK附带的VisualVM(JDK_HOME / bin / visualvm)。它允许您查看每个线程的堆栈跟踪,甚至查看所有对象实例。

AppletViewer非常方便,您可以从Eclipse运行“Run as / Java Applet”或“调试为/ Java Applet”来调试您的Applet类。

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

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” 。通过这种方式,当您访问applet页面时,浏览器将显示为冻结状态,因为JVM立即挂起,等待调试器连接。

3)使用您最喜爱的IDE来远程调试Java插件

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

点击“新建”按钮。

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

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

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

扫码关注云+社区