如何利用 Eclipse 工具来诊断客户问题 |
作者:Jan Kratky 来自:IBM 本文描述了可用于诊断客户报告的 Eclipse 插件问题的策略。这些策略最强大之处在于能够将一个调试会话从一个 Eclipse 实例附加到正在远程主机上运行的 Eclipse 实例上。本文中所描述的策略对于基于 Eclipse 2.x 的所有产品都有效,如 WebSphere Studio Application Developer 和 WebSphere Studio Site Developer。 因此,您写了一个 Eclipse 插件,您将它交给了用户 — 那个用户甚至可能为其支付了费用。该用户迟早会报告问题。有时您只要根据症状报告就能够断定发生了什么事。而在其它时候,错误将十分棘手,以至于您需要从用户那里获取更多信息,包括其系统配置,以及确保他实际正在运行的插件版本是正确的。而在最坏的情况下,您甚至无法在您的环境中重现问题;您需要直接访问用户的机器以真正地了解发生了什么事。 所幸的是,只要具备少量的工作台工具知识和访问插件元数据的方法,您就可以诊断客户针对插件可能报告的任何问题。在本文中,您将看到: □ 如何获得客户工作台配置方面的综合信息,包括所安装的插件和功能部件,还包括它们每一个的版本 工作台配置 Eclipse 提供了一种简单的方法来抽取一个正在运行的工作台实例的配置细节(另请参阅图 1): 1. 在工作台的主工具栏中展开 Help 菜单。 在当前透视图的编辑器区域将打开一个名为“Configuration Details”的文件。该文件含有以下信息: □ 正在运行工作台 JRE 的所有 Java 系统特性 您有时候可能会希望客户给您发送整个日志的副本。幸运的是,将日志保存到文件系统很容易: 1. 确保 Configuration Details 文件在其中打开的编辑器位于前面并且具有焦点。 在图 1 中还请注意,在 About... 对话框中另外两个按钮 Feature Details 和 Plug-in Details 也可用。按其中的任意一个按钮,会出现一个对话框,该对话框中含有插件/功能部件及其版本的表视图。如果您希望迅速知道是否真的安装了插件,或者是否安装的插件为某个版本,那么您可能希望让客户先检查一下那些对话框中的清单,而不是让他发送其整个配置细节文件。 工作台错误日志 错误日志按年月日顺序(离现在越近的消息越靠近文件尾部)包含工作台和插件代码选择记录的任何消息和异常。工作台自动将所有未捕获的异常记录到错误日志中。 错误日志的文本包含在我们于前一节中生成的 Configuration Details 文件中。Eclipse 还从 Error Log 视图提供了错误日志的图形视图,Error Log 视图可以在 PDE Runtime 视图类别下找到。(要打开视图,请选择 Window > Show View)。错误日志条目在表中以行的形式出现;最近的条目显示为第一行。您可以这样来查看某个条目的详细信息:选择一行,单击鼠标右键,然后选择 Properties。在出现的特性对话框中,特定日志条目的详细信息位于 Status Details 页上。另请参阅图 2。 错误日志文件本身作为 .metadata/.log(相对于工作空间 root)驻留在文件系统上。工作空间 root 常常直接位于工作台安装目录中,作为名为 workspace 的文件夹(这是 Eclipse 缺省工作空间位置)。然而,用户可以将其工作空间 root 配置为文件系统中的任何文件夹。 插件注册表 Configuration Details 文件列出了安装在工作台实例中的功能部件和插件。然而,该文件并不指示各个插件是否是活动的。 插件是惰性装入的 — 即其代码只有在需要的时候才装入内存。这样,就会出现这样一种情形,插件已经安装了,但因为某些原因,它却没有被激活。这表明:要么是在工作台试图装入该插件时发生了错误,要么只是还没有访问插件的功能。 Plug-In Registry 视图列出了已安装的插件,并指示每个插件是否是活动的。要打开该视图,请转向 Window > Show View。可以在 PDE Runtime 类别下找到该视图。 插件是根据名称排序的(显示的是名称而不是插件标识)。如果插件图标的上面放有一个“runner”图标,那么该插件是活动的。 图 3 显示了一个样本工作台安装的 Plug-in Registry 视图。请注意,并非所有显示的插件都是活动的,只有那个名为“Apache Axis”的插件才是活动的,其图标包含“running”修饰。 在激活(或者取消激活)插件时,插件注册表视图并不自动更新。要检取插件的当前启用/禁用状态,请按视图标题栏中的 Refresh 按钮。否则,视图所反映的仍将是视图首次显示时所存在的事务状态。 插件元数据 插件通常会维护特定于自己的元数据。该元数据可以采取任何形式:特性文件、XML 文件甚至特有的二进制格式。当元数据采用人们可以读懂的格式时,这对直接查看元数据文件会很有用。 插件元数据驻留在文件系统的 .metadata/.plugins 目录(相对于工作空间 root)下。.plugins 目录内有一些文件夹,它们各自对应一个插件,以便维护它们自己的元数据。每个文件夹的名称都与对应插件的标识相同。该插件的元数据应该能够在文件夹中找到。 插件创建者也可能已经选择了使用插件的缺省 preferences.ini 文件,该文件位于插件的 install 文件夹中。该 install 文件夹将包含插件的标识,并且将位于 plugins 目录中,安装就是在该目录中进行的(该目录通常可以直接在工作台安装 root 下找到,但请记住,插件安装位置是可配置的)。 请注意,让插件在我们刚才描述的位置维护其元数据被认为是工作台最佳做法。不过,您应该警惕这种可能性,即插件创建者可能选择不遵循这一约定,而将元数据存储在其它一些位置,如系统 temp 目录。 调试远程工作台 用于维修 Eclipse 插件代码的功能最强大的工具是 Eclipse 调试器调试客户工作台的能力,即便客户的工作台运行于远程机器上也不例外。任何运行工作台实例的机器,只要能够通过网络进行访问,您都可以使用 Eclipse 安装的 Debug 透视图来调试实例上所出现的问题。远程工作台借助开放的套接字来公开其调试信息(清单 1 显示了打开调试套接字所需指定的 Eclipse 启动参数)。在将调试器连接到客户的工作台之后,您就可以利用 Eclipse 调试器的全部功能,如设置断点、检查变量和执行堆栈等等。(有关使用 Eclipse Java 调试器的详尽信息可以在工作台帮助中获得,工作台帮助可以通过工作台的 Help > Help Contents 菜单项来访问。) 重要:工作台工作空间中的源代码必须与用来构建(客户安装的)插件版本的代码相匹配。在继续之前,需要确定客户所安装的代码的级别,并确保您工作空间中的代码与之匹配。 在确信源代码处于正确的级别之后,客户必须使用下列参数(显示在清单 1 中)来启动其工作台实例,以启用到远程调试器的连接。 清单 1. 启动可远程调试的工作台 eclipse.exe -vmargs -Xdebug -Xnoagent \ 请注意赋给 address 的值,它是一个端口号,远程调试器将开放该端口供连接使用。在上面的示例参数中,端口号是 8000。要明白,客户可能位于防火墙的后面,他可能必须对防火墙进行配置,以便您能够建立套接字连接。 指定 server=y 将表明您刚刚启动的 VM 将等待进入的套接字连接。通过指定 suspend=n,您允许 Java 类的执行继续进行。通过指定 suspend=y(或者完全忽略 suspend 指定,因为 y 是其缺省值),您将告知刚刚启动的 VM:在装入主类之前,您希望它立即暂停。 现在,必须从您的工作台将调试器连接到客户的会话: 1. 切换到 Debug 透视图(Window > Open Perspective)。 现在,您已连接到客户的工作台了。可以要求用户在其工作台中执行任何您希望的操作,而其工作台状态将反映在调试会话中。 在以这种方式进行调试的时候,您可能希望使用远程控制工具(如由 WinVNC 或 Lotus Sametime 提供的工具)来直接控制客户的桌面,以便您能够自己在客户工作台上启动操作。 如果检索到正确级别的代码,那么您将能够使用这一技术来代替跟踪机制。Eclipse 提供了一个优秀的跟踪框架(请参阅参考资料以获取链接),但象所有跟踪机制一样,这种跟踪框架要求将其代码插入插件源代码中来产生跟踪语句。那些代码会有一些性能损失,即便关闭了跟踪也是如此,而且它们肯定会增加代码资源占用量。而且,您要受开发人员的制约 — 如果在您需要插入跟踪语句的某个地方没有插入跟踪语句,那么跟踪对您将毫无帮助。然而,有了远程调试技术,您就不必为之担忧了 — 您拥有完全源代码级调试的能力。 建议的客户服务过程 在本文中,您看到了一组用于诊断 Eclipse 插件客户问题的工具。现在,如何以最适合于您及您的开发小组的方式使用这些工具就由您决定了。对客户服务过程的一个建议是: 1. 如果您无法光凭错误报告来重现问题,那么就叫客户把他的配置文件副本发一份给您。用它来确保您的插件版本与用户的插件版本相同。您还需要仔细检查错误日志以了解“泄密”消息和堆栈跟踪。 结束语 基于 Eclipse 的工作台为综合可服务性提供了从查看详细配置信息到对客户安装进行实际代码级别调试的广泛功能。 |