你如何debuggingJava小程序?

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

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

这篇文章有点旧了,但是仍然相关(包括题为“如何在Java插件中debuggingApplets”的小节)。

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

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

我经常从控制台中使用的另一个命令是0-5的跟踪级别:

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

从这个页面,你会看到这个关卡是这样的:

  • 0 – closures
  • 1 – 基本
  • 2 – networking,caching和基本
  • 3 – 安全,networking和基础
  • 4 – 扩展,安全,networking和基本
  • 5 – LiveConnect,扩展,安全,networking,温度和基本

这些工具可能都是相当有用的,因为你试图解开世界上已经进入你的小程序的头。 我知道他们为我工作。

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

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

但是,有时为了debugging一些安全相关的东西,浏览器插件环境与appletviewer差别太大了。 以下是可以在浏览器中有效debugging小程序的方法:

1)获取二进制文件的debugging信息

从JRE_HOME / lib中备份.jar文件

(下载并)安装与您的JRE相同版本的JDK。

将.jar文件从JDK_HOME / jre / lib复制到JRE_HOME / lib

JDK中的文件是用包含debugging信息(源代码行号信息,variables名等)编译的,而JRE文件没有这个信息。

没有这个,你将无法在debugging器中有意义地进入核心类代码。

2)启用Java插件的debugging

转到Java控制面板/ Java / Java运行时设置/查看/用户/运行时参数

并添加选项以启用debugging。 像这样的东西:

-Djava.compiler=NONE -Xnoagent -Xdebug -Xrunjdwp:transport=dt_socket,address=2502,server=y,suspend=n 

有趣的选项是端口(在这里使用2502,你可以使用几乎所有的空闲端口,只是把它写下来)和暂停 – 如果你需要debugging小程序启动,类加载等,设置为“Y” 。 通过这种方式,当您访问applet页面时,浏览器将显示为冻结,因为JVM立即挂起,等待debugging器连接。

3)使用您最喜爱的IDE远程debuggingJava插件

在Eclipse中,例如,select运行/debuggingconfiguration… /远程Java应用程序

点击“新build”button。

确保连接types是“Socket Attach”,如果你的浏览器是本地的,selectlocalhost作为主机,以及你之前select的端口(在本例中为2502)。

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

保存configuration,一旦浏览器运行插件(无论是否挂起JVM),运行远程debugging器连接插件JVM,打开一个包含applet源的项目。

小程序查看器支持debugging选项。

来自未捕获exception的堆栈跟踪将显示在控制台上。 这可以从Java控制面板(高级> Java控制台>显示控制台)启用,或者某些浏览器有不同的选项或插件来启用它。

您可以将debugging器附加到正在运行的PlugIn进程。

也许最好的方法是不要debugging。 写testing。 编写不适合不必要的假设的代码 – 例如,您正在作为一个小程序运行。 不幸的是,大多数GUI / applet示例代码写得非常糟糕。

未捕获的exception发送到控制台。 您还可以使用System.out将自己的消息写入控制台。 要查看结果,需要通过右键单击系统托盘中的Java图标并打开控制台来打开控制台(请注意,这与Microsoft的VM不同)。

要正确debuggingapplet,可以设置Eclipse来debuggingapplet。 右键单击小程序源文件,然后单击“作为小程序debugging”。 (如果你有applet的参数,你需要设置它。)然后,你可以像debugging任何其他Java代码一样通过applet代码。

我面临的问题做远程小程序debugging,每次尝试从eclipse连接时,它会抛出连接被拒绝的错误,我的jre版本是64位和eclipse 32位,当我用32位jrereplace,它为我工作。 另外,如果我们安装了32位和64位的jre版本,默认情况下,IE使用64位jre作为applet,chrome和FF可以使用32位jre版本。

对于我来说,在eclipse中debuggingapplet的最重要的动作是在java控制面板(tab java)中设置正确的二进制文件,这些二进制文件具有debugging符号。 只有jdk中包含JRE才有这个符号。 所以要debuggingJava控制面板中的小程序,选项卡java,按查看button,findjdk文件夹下的正确的jre后,为我例如“C:\ Programmi \ Java \ jdk1.7.0_03 \ jre”,并把检查启用为此条目。 这对我来说是干净的方式来做什么萨米Koivu说。