如何利用Eclipse工具来诊断客户问题
【IT168技术文档】
插件元数据
插件通常会维护特定于自己的元数据。该元数据可以采取任何形式:特性文件、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 \
-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
请注意赋给 address 的值,它是一个端口号,远程调试器将开放该端口供连接使用。在上面的示例参数中,端口号是 8000。要明白,客户可能位于防火墙的后面,他可能必须对防火墙进行配置,以便您能够建立套接字连接。
指定 server=y 将表明您刚刚启动的 VM 将等待进入的套接字连接。通过指定 suspend=n,您允许 Java 类的执行继续进行。通过指定 suspend=y(或者完全忽略 suspend 指定,因为 y 是其缺省值),您将告知刚刚启动的 VM:在装入主类之前,您希望它立即暂停。
现在,必须从您的工作台将调试器连接到客户的会话:
1. 切换到 Debug 透视图(Window > Open Perspective)。
2. 从主工作台菜单选择 Run > Debug...。(或者,从(工作台工具栏中的)Debug 按钮上的下拉菜单选择 Debug...)。
3. 在启动配置对话框的左侧视图中选择 Remote Java Application 项。
4. 单击 New 按钮。随后会创建一个新的远程启动配置,并会显示三个选项卡:Connect、Source 和 Common。
5. 在 Connect 选项卡的 Project 域中,输入或者通过浏览选择要使用的项目作为启动的参考(用于源码查找)。对于远程工作台调试,您无须指定项目。
6. 在 Connect 选项卡的 Host 域中输入正在运行 Java 程序的主机的 IP 地址或域名。如果程序与工作台运行于同一台机器上,那么请输入 localhost。
7. 在 Connect 选项卡的 Port 域中输入端口,远程 VM 在该端口上接受连接。在我们的示例中,这个值为 8000,它匹配使用清单 1 中的参数启动远程工作台时所指定的端口。
8. Allow termination of remote VM 标志是一个开关,它确定调试器中是否支持 Terminate 命令。如果您希望能够终止目前所连接的 VM,那么请选择此选项;您一般不需要这么做。
9. 单击 Debug。启动试图通过指定的地址和端口连接到 VM,结果显示在 Debug 视图中。如果启动程序无法通过指定的地址连接到 VM,那么会出现一条错误消息。

现在,您已连接到客户的工作台了。可以要求用户在其工作台中执行任何您希望的操作,而其工作台状态将反映在调试会话中。
在以这种方式进行调试的时候,您可能希望使用远程控制工具(如由 WinVNC 或 Lotus Sametime 提供的工具)来直接控制客户的桌面,以便您能够自己在客户工作台上启动操作。
如果检索到正确级别的代码,那么您将能够使用这一技术来代替跟踪机制。Eclipse 提供了一个优秀的跟踪框架(请参阅参考资料以获取链接),但象所有跟踪机制一样,这种跟踪框架要求将其代码插入插件源代码中来产生跟踪语句。那些代码会有一些性能损失,即便关闭了跟踪也是如此,而且它们肯定会增加代码资源占用量。而且,您要受开发人员的制约 — 如果在您需要插入跟踪语句的某个地方没有插入跟踪语句,那么跟踪对您将毫无帮助。然而,有了远程调试技术,您就不必为之担忧了 — 您拥有完全源代码级调试的能力。
建议的客户服务过程
在本文中,您看到了一组用于诊断 Eclipse 插件客户问题的工具。现在,如何以最适合于您及您的开发小组的方式使用这些工具就由您决定了。对客户服务过程的一个建议是:
1. 如果您无法光凭错误报告来重现问题,那么就叫客户把他的配置文件副本发一份给您。用它来确保您的插件版本与用户的插件版本相同。您还需要仔细检查错误日志以了解“泄密”消息和堆栈跟踪。
2. 如果问题看起来是个插件激活问题,那么您可能要让用户检查其插件注册表视图来替您一查究竟。
3. 如果似乎是插件元数据处理方面出了错误,或者问题特定于用户安装插件的方式,那么就叫用户把您认为可能有嫌疑的特定于插件的元数据文件副本发给您。
4. 如果这些都不奏效,那么请将匹配级别的源代码装入您的工作空间,然后远程调试客户的工作台。
当然,要找到客户问题的症结所在,您必须保持灵活,具体问题具体分析。
结束语
基于 Eclipse 的工作台为综合可服务性提供了从查看详细配置信息到对客户安装进行实际代码级别调试的广泛功能。
0
相关文章