为最终用户调试Eclipse插件

Eclipse平台是许多IBM产品(包括IBM®WebSphere®Studio和现在的IBM®Rational®Application Developer)的基础。 Eclipse平台是一个应用程序框架,旨在接受插件。 鉴于其基于插件的体系结构,Eclipse已被组件化。 每个组件都有单独的插件表示,这使许多开发人员可以开发单个成品。 但是,如果这些组件一起工作,可能会发生许多意外错误。 幸运的是,这是在开发平台本身时可以预料的,并且有很多方法可以诊断和解决这些问题。

.log文件

当Eclipse遇到运行时错误时,通常会引发异常,因此该错误应记录在.log文件中。 每个Eclipse工作区都存在.log文件。 它只会在发生错误时创建,并且可以在.metadata目录下的工作区中找到。 对于插件开发人员而言,此文件中的信息至关重要,因为该文件通常由异常和堆栈跟踪组成。 开发人员可以通过自己的代码跟踪堆栈,以确定该插件在哪里失败。

作为最终用户, .log文件也是查找问题的理想起点,但是它看起来令人生畏,对除插件开发人员本身之外的任何人都没有用。 这是找出哪个插件失败的好方法,但是不会告诉最终用户太多其他信息。

追踪选项

Eclipse的跟踪支持可以确定更多信息。 如果插件开发人员利用了跟踪工具,则在报告插件问题时您会发现它们很有用。 如果插件支持跟踪选项,则它将在插件的根目录中包含一个.options文件。 使用这些跟踪选项,可以获得有关插件功能的更多详细信息。 顾名思义,该插件的痕迹通常会打印到控制台上,以描述该插件的活动。

选项文件

选项文件类似于Java™属性文件,默认情况下名为.options 。 该文件由键/值对组成。 以#开头的行表示注释。 通常,这些选项将是true / false选项,这将打开或关闭该选项。 其他选项可能包括跟踪级别(DEBUG,WARN或ERROR)或过滤器。

以调试模式启动Eclipse

为了利用跟踪选项并获得其输出,必须以调试模式启动Eclipse。 在调试模式下启动Eclipse的最简单方法是使用-debug参数从命令行运行它,如以下示例所示。

D:\RAD6\rationalsdp.exe -debug [options file]

如果省略了可选的.options ,则Eclipse将在当前目录中查找.options

示例:Eclipse构建器

Eclipse有两种构建类型: 完全构建和增量构建。 增量构建将仅构建已修改的资源。 这是通过检查资源的最后状态来确定的。 当在项目上调用完全构建时,将重新构建项目中的所有资源。

在处理大型项目时,完整构建会非常耗时。 有时,似乎不必要时似乎正在进行完整构建。 通过使用跟踪选项,可以确定是否确实在进行完整构建。 对于此示例,将使用Java开发工具插件中的跟踪选项来监视Java构建器的活动。

清单1是Eclipse为Java开发工具(JDT)核心插件提供的.options文件。

清单1. org.eclipse.jdt.core_3.0.1 \ .options
# Turn on debug tracing for org.eclipse.jdt.core plug-in
org.eclipse.jdt.core/debug=false

# Reports buffer manager activity
org.eclipse.jdt.core/debug/buffermanager=false

# Reports incremental builder activity : nature of build, built state reading, indictment process
org.eclipse.jdt.core/debug/builder=false

# Reports compiler activity
org.eclipse.jdt.core/debug/compiler=false

# Reports codeassist completion activity : recovered unit, inferred completions
org.eclipse.jdt.core/debug/completion=false

# Reports classpath variable initialization, and classpath container resolution
org.eclipse.jdt.core/debug/cpresolution=false

# Report type hierarchy connections, refreshes and deltas
org.eclipse.jdt.core/debug/hierarchy=false

# Reports background indexer activity: indexing, saving index file, index queries
org.eclipse.jdt.core/debug/indexmanager=false

# Print notified Java element deltas
org.eclipse.jdt.core/debug/javadelta=false
org.eclipse.jdt.core/debug/javadelta/verbose=false

# Reports Java model elements opening/closing
org.eclipse.jdt.core/debug/javamodel=false

# Reports post actions addition/run
org.eclipse.jdt.core/debug/postaction=false

# Reports java search activity
org.eclipse.jdt.core/debug/search=false

# Reports open on selection activity : recovered unit, inferred selection
org.eclipse.jdt.core/debug/selection=false

# Reports access to zip and jar files through the Java model
org.eclipse.jdt.core/debug/zipaccess=false

该文件中的选项将用于创建自定义.options文件。 在此示例中,希望跟踪工作空间中所有项目的构建,因为它们似乎花费了太长时间。 清单2中显示了以上文件中感兴趣的选项。

清单2. builder.options
#This is a global debug option for the plug-in and is necessary for any other options to work
org.eclipse.jdt.core/debug=true

#This will give us information about the builder's activity
org.eclipse.jdt.core/debug/builder=true

给定Eclipse主目录D:\ RAD6,将文件另存为D:\ RAD6 \ builder.options。

使用以下命令运行Eclipse:

D:\RAD6\rationalsdp.exe -debug builder.options

这将打开一个控制台日志窗口,并显示来自Eclipse的输出,如图1所示。您可以验证是否已加载选项文件。

图1. Eclipse启动输出
控制台日志窗口
控制台日志窗口

调用完整的构建之后,您的输出将类似于图2和清单3所示。

图2.调用完整项目构建后的示例输出
样品输出
样品输出
清单3.完整构建的输出
Starting build of BuilderExample @ Thu Mar 24 13:35:33 EST 2005
FULL build
About to compile example/ExampleC.java
About to compile example/ExampleB.java
About to compile example/ExampleA.java
Writing new class file ExampleC.class
Writing new class file ExampleB.class
Writing new class file ExampleA.class
Recording new state : State for BuilderExample (#0 @ Thu Mar 24 13:35:34 EST 2005)
Finished build of BuilderExample @ Thu Mar 24 13:35:35 EST 2005

保存ExampleA.java之后,您的输出类似于图3。与完整构建的输出相反,清单4显示了增量构建的输出。

图3.保存ExampleA.java之后的示例输出
样本输出
样本输出
清单4.增量构建的输出
Starting build of BuilderExample @ Thu Mar 24 13:37:25 EST 2005
Found source delta for: BuilderExample
Clearing last state : State for BuilderExample (#0 @ Thu Mar 24 13:35:34 EST 2005)
INCREMENTAL build
Compile this changed source file example/ExampleA.java
About to compile example/ExampleA.java
Writing changed class file ExampleA.class
Recording new state : State for BuilderExample (#1 @ Thu Mar 24 13:35:34 EST 2005)
Finished build of BuilderExample @ Thu Mar 24 13:37:25 EST 2005

这些是完整构建和增量构建的标准调用,但是在许多情况下,它们会由于未知原因被调用。 在这些情况下,拥有此类信息对于帮助您确定原因非常有用。 JDT插件还有许多其他跟踪选项。

使用控制台时出现问题

使用控制台日志窗口存在某些已知问题。 文本可以被换行,因为控制台窗口的缓冲区有限。 结果,长时间的会话后,某些文本可能会被截断。 如果要保存此数据,则需要将其从命令窗口复制并粘贴到文本编辑器中。 解决此问题的方法是将输出重定向到文件。 但是,重定向eclipse.exe的输出将无济于事,因为该可执行文件将调用Java™虚拟机(JVM™)并产生一个新进程。 新过程将仅打开控制台窗口,并且会发生相同的问题。 但是,由于Eclipse是Java应用程序,因此它可以作为Java进程启动,从而使您能够成功地重定向输出。 主类位于startup.jar中。 您可以使用以下命令启动Eclipse。

java -cp startup.jar org.eclipse.core.launcher.Main

您可以在此命令后附加一些其他命令行参数,以将输出重定向到文件:

java -cp startup.jar org.eclipse.core.launcher.Main -debug builder.options > output.txt 2>&1

您还可以创建一个批处理文件,以使其变得更容易,如清单5所示。

清单5. rundebug.bat
@echo off
java.exe -cp startup.jar org.eclipse.core.launcher.Main -data %1 -debug %3 > %2 2>&1

REM Usage: rundebug <workspace> <logfile> [options]
REM If [options] is left out, Eclipse will look for .options in the current directory

从开发方面进行插件跟踪

作为插件开发人员,您可能已经熟悉插件跟踪。 这在测试插件时非常有用,并且Eclipse插件开发环境(PDE)工作台具有对插件跟踪的内置支持。 让我们看一下如何向自己的插件中添加一些跟踪选项。

示例:Hello World插件

  1. 首先,创建一个新的插件,如图4所示。
图4.新的插件项目
插件项目
插件项目
  1. 单击文件->新建->其他->插件开发->插件项目
  2. 调用项目HelloWorld ,如图5所示。
图5.插件项目名称
项目名称
项目名称
  1. 选择Hello,World模板,如图6所示,然后单击Finish。
图6.选择模板
您好,已选择世界模板
您好,已选择世界模板
  1. 下一步是创建选项文件。
  2. 单击File-> New-> Other-> Simple-> File ,如图7所示。
图7.创建.options文件
.options文件
.options文件
  1. 在插件根目录中创建文件,然后调用文件.options,如图8所示。
图8.新文件名
文档名称
文档名称
  1. 添加一个选项,如图9所示。
图9. HelloWorld的.options
添加一个选项
添加一个选项
  1. 保存并关闭选项文件。
  2. 现在,向插件添加一些跟踪
  3. 打开SampleAction类并找到run()方法,如图10所示。
图10. SampleAction类
选择SampleAction类的运行方法
  1. 可以通过以下方法调用来访问选项
  2. Platform.getDebugOption(HelloWorldPlugin.getDefault().getBundle().getSymbolicName() + "/debug")

上面方法调用的说明

Platform.getDebugOption(字符串选项)
这将查看插件选项文件并返回该选项的String值。
HelloWorldPlugin.getDefault()。getBundle()。getSymbolicName()
代替对插件ID进行硬编码,这将返回插件ID-这样,如果插件ID被更改,则无需触摸代码
“ /调试”
现在,我们可以附加我们自己的特定选项

清单6显示了SampleAction的代码。

清单6. SampleAction.run()的代码
public void run(IAction action) {

	boolean debug = Platform.getDebugOption(
						HelloWorldplug-in.getDefault()
						.getBundle()
						.getSymbolicName() + "/debug")
						.equalsIgnoreCase("TRUE");
	
	if (debug) {
		System.out.println("Opening message dialog");
	}

	MessageDialog.openInformation(window.getShell(), "HelloWorld Plug-in", "Hello, Eclipse world");
}
  1. 最后一步是测试插件。
  2. 单击运行->运行...
  3. 选择Eclipse Application或Runtime Workbench(这取决于Eclipse版本),然后单击New ,如图11所示。
图11.创建一个运行时工作台配置
工作台配置
工作台配置
  1. 切换到Plug-ins选项卡,并确保选择了Hello,World插件,如图12所示。
图12.选择插件
选择“ Hello,World”插件
选择“ Hello,World”插件
  1. 切换到“ 跟踪”选项卡。
  2. 通过选中复选框启用跟踪。
  3. 选择您的Hello,World插件并打开调试选项,如图13所示。
图13.启用跟踪
调试选项已启用
调试选项已启用
  1. 单击“ 应用” ,然后单击“运行”
  2. 一旦运行时工作台出现,请尝试单击“ Hello,World”按钮
  3. 切换回PDE工作台,您的调试消息应打印到控制台。

有关插件开发的更多信息,请参见参考资料小节中的PDE插件

Eclipse调试实用程序

为了使查找和访问这些跟踪选项更加容易,我创建了一个小型软件应用程序,该应用程序提供了类似于Eclipse启动配置所提供的GUI界面-请参见“可下载资源”部分。

调试实用程序提供了一些附加功能,以帮助确定Eclipse问题的原因。

  1. 产品检测
    • 调试实用程序可以检测某些基于Eclipse的现有IBM产品,例如WebSphere Studio或Rational Application Developer。
  2. 追踪选项
    • 与运行时工作台配置提供的功能类似,该实用程序将为所有具有.options文件的插件找到选项,并且可以打开或关闭它们。
    • 该实用程序还允许您导入外部.options文件,或使用该实用程序中选择的所有选项导出.options文件。
  3. JVM选项
    • 可以打开或关闭J9 JVM(用于IBM,Java™Developer Kit或JDK)。 另外,可以从JVM获得详细的Java输出。
    • 这些功能将不在本文中讨论。 但是,调试实用程序自述文件描述了如何使用它们。

使用调试实用程序运行构建器示例

  1. 下载并安装该实用程序。
    • 链接到实用程序。
    • 解压缩档案并将其解压缩到Eclipse主目录,如图14所示。
图14.提取文件
将文件解压缩到Eclipse主目录
将文件解压缩到Eclipse主目录
  1. 使用提供的.bat文件运行该实用程序,如图15所示。

D:\RAD6\eclipse\debugUtil.bat

图15. Eclipse调试实用程序
运行Eclipse调试实用程序
运行Eclipse调试实用程序
  • 将debugUtil.bat用于IBM产品。
  • 对于基本的Eclipse或其他基于Eclipse的产品,请使用debugUtil_noVM.bat
    • 这将要求java.exe在系统路径中
  1. 找到JDT核心插件,如图16所示。
图16.选择一个插件
选择JDT核心插件
选择JDT核心插件
  1. 打开调试选项和构建器,如图17所示。
图17.选择跟踪选项
选择调试和构建器的跟踪选项
选择调试和构建器的跟踪选项
  1. 输入工作空间位置或单击浏览以在文件系统中找到您的工作空间,如图18所示。
图18.选择一个工作空间
在文件系统中选择工作区
在文件系统中选择工作区
  1. 点击启动
  2. 所有输出将发送到两个日志文件。
    • 系统错误将转到debugOutputErr.log文件。
    • 系统输出将转到debugOutput.log文件,如清单7所示。
清单7. D:\ RAD6 \ eclipse \ debugUtil \ log \ debugOutput.log
################################################################################
Starting session: 7/17/2005--11:21:51.860
################################################################################
Install location:
    file:/d:/RAD6/eclipse/
Configuration file:
    file:/d:/RAD6/eclipse/configuration/config.ini loaded
Configuration location:
    file:/d:/RAD6/eclipse/configuration/
Configuration file:
    file:/d:/RAD6/eclipse/configuration/config.ini loaded
Framework located:
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/
Loading framework classpath from:
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/eclipse.properties
Loading extension: com.ibm.jxesupport
Framework classpath:
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/core.jar
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/console.jar
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/osgi.jar
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/resolver.jar
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/defaultAdaptor.jar
    file:/d:/RAD6/eclipse/plug-ins/org.eclipse.osgi_3.0.1/eclipseAdaptor.jar
    file:/d:/RAD6/eclipse/plug-ins/com.ibm.jxesupport_1.3.6/jxesupport.jar
Debug options:
    file:/D:/RAD6/eclipse/debugUtil/options/1124292111652.options loaded
Time to load bundles: 99
Starting application: 14041
Error querying the registry:The system cannot find the file specified.


Starting build of BuilderExample @ Wed Aug 17 11:25:31 EDT 2005
About to read state...
Successfully read state for BuilderExample
Found source delta for: BuilderExample
Clearing last state : State for BuilderExample (#4 @ Wed Aug 17 10:52:07 EDT 2005)
INCREMENTAL build
Compile this changed source file example/ExampleA.java
About to compile example/ExampleA.java
Writing changed class file ExampleA.class
Recording new state : State for BuilderExample (#5 @ Wed Aug 17 10:52:07 EDT 2005)
Finished build of BuilderExample @ Wed Aug 17 11:25:31 EDT 2005
Saving built state for project BuilderExample
Saved in 20 ms
################################################################################
Ending session: 7/17/2005--11:25:40.249
################################################################################
  1. 一旦Eclipse关闭,调试实用程序将收到进程退出代码的通知,如图19所示。
图19.流程终止
流程退出代码
流程退出代码

调试Eclipse

完成本文后,您现在应该可以使用WebSphere Studio和Rational Application Developer中可用的功能来调试Eclipse插件。 如您所见,该过程并不复杂。 另外,您可以使用调试实用程序将调试输出重定向到日志文件。


翻译自: https://www.ibm.com/developerworks/rational/library/06/0221_rossner/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值