在正常开发期间,应该不需要考虑由每个 Visual Editor 实例使用的 VM。但是,高级用户可以配置工作台,以便发送至 VM 的 System.out 或 System.err 的任何消息都会被写入工作空间中的 .metadata 目录中的 .log 文件。
用来执行 Java bean 的虚拟机(VM)不是正在运行工作台的 VM。将为每个 Visual Editor 实例创建独立的 VM。此 VM 的类路径被设置为项目的 Java 构建路径中的条目。如果在 Visual Editor 打开时更改了 Java 构建路径,则必须关闭任何打开的编辑器并重新打开它们才能反映更新的构建路径。
在启动工作台时,可以为它提供一个 -DEBUG 选项,该选项指向文本文件:
-DEBUG file:/c:/temp/options.txt
调试文件包含由 Visual Editor 读取的条目。如果该文件包含下面这一行,则发送至 System.out 或 System.err 的任何消息都会显示在控制台中:
org.eclipse.jem.proxy/debug/vmtraceout=true
除了从 Visual Editor 所使用的 VM 中显示控制台输出之外,您还可以用调试方式启动它并执行远程调试。此方案未经优化,可能会在 Visual Editor 的将来版本中进行更改。但还是提供了此方案以备您在设计时需要执行 Java bean 调试。要执行远程调试,您将需要运行两个工作台:一个是具有要调试的 Java bean 的工作台,另一个是可以执行基于套接字的远程调试的工作台。第二个工作台可以在同一台机器上运行,也可以在另一台机器上运行。要启用 Visual Editor 的 VM 的调试,-DEBUG 文件应该包含以下行:
org.eclipse.jem.proxy/debug/debugvm=true
Visual Editor 每次启动 VM 时,它都会询问您是否要让它以调试方式启动。此消息将被写至对话框,或者,如果 -DEBUG 文件包含条目 org.eclipse.jem.proxy/debug/ioconsole=true,则它将被写至 System.out。
如果将消息写入 System.out,则它将请求您输入 Y 或 N 并等待 System.in:
想以调试方式启动远程 vm(HelloFrame.java 的项目 (Test)-VM)吗?(输入 Y 或 N):
上面的对话框适用于使用 Visual Editor 打开项目 Test 中的类 HelloFrame.java 的情况。如果选择“是”,即在控制台中输入 Y 并按 Enter 键,则 VM 以暂挂方式启动,并且 -Xdebug 使用套接字连接器。将分配可用端口。然后,会告知您端口号。
如果将消息写入 System.out,则它将等待 System.in 上的输入。
现在,您必须将调试器连接到端口号 7078。连接调试器时输入“y”。如果未连接调试器,则程序不能正确地继续运行。如果不能连接调试器,则按“n”。这仍将导致错误,但是它将更好地清除。输入“y”或“n”:
下一步是将远程调试器连接至端口号 7078。当远程调试器连接时,运行 Visual Editor 的工作台实例将被暂挂,因此,您必须从另一个应用程序中使用调试器。如果另一个应用程序是另一个工作台实例,则可以通过使用菜单选项调试 > 调试并创建新的“远程 Java 应用程序”配置来开始进行远程调试。
输入先前写至标准输出的端口号,在此示例中为 7078。如果调试器位于另一台机器上,则应该在主机字段中输入运行正在调试的工作台的机器的 IP 地址。要启动远程调试器,请单击调试,然后在所调试的工作台的标准输入控制台中输入 y。
除了会提示您调试由 Visual Editor 的每个实例使用的 VM 以外,您还将看到提示您调试项目本身的消息:
想以调试方式启动远程 vm(项目 (Test)-Beaninfo)吗?(输入 Y 或 N):
这是针对用于自省且运行 java.beans.Introspector 的 VM 的,并且因为它未指定特定 Java 源文件名,所以可以与用于 Visual Editor 的 VM 区分开来。在项目中首次需要 Java bean 的任何 bean 信息时,会启动此 VM,并且只要该项目仍然打开,此 VM 就保持活动状态。通过调试此项目,可以在自省 Java bean 时单步执行和分析 BeanInfo 类中的任何代码。对于使用 Java bean 类的每个项目,将对每个 Java bean 类执行一次自省。结果会保存在高速缓存中以帮助提高性能。如果在任何时候,您需要清除为项目保存 BeanInfo 信息的高速缓存,则可以从项目的弹出菜单中关闭然后打开该项目。