JDT Debug 由几个支持运行和单步调试Java核心的插件组成
org.eclipse.jdt.launching是一个定义Java启动和运行时支持的插件。当你需要启动JVM程序时,你可以使用这个插件。JDT启动与一种叫做启动程序的平台启动设备紧密相关。 org.eclipse.jdt.launching包提供Java平台运行时类。JavaRuntime有一些静态方法的实现,去访问已经被注册的VM,计算运行时类路径和源查找路径。一类虚拟机(比如JDK虚拟机)是被 IVMInstallType类描述的。在这类虚拟机里面IVMInstall描述特有的设备(installations )。 IVMRunner用来启动特有的Java虚拟机和注册他的流程到Debug插件中。 org.eclipse.jdt.launching.sourcelookup.containers包定义了相关的类,用于操作文件系统中的本地源代码。
org.eclipse.jdt.debug是一个定义了Java debug模型的插件。当你在程序中要使用Debug调试时,你将使用到这个插件。JDT Debug模型与平台Debug模型紧密联系。org.eclipse.jdt.debug.core包支持基于JDI/JDWP的Java Debug模型,这可以用来在Debug模式下控制Java程序。 org.eclipse.jdt.debug.eval 包是评估Java表达式和报告结果的基础。
org.eclipse.jdt.debug.ui是一个定义Java debug UI扩展的插件。大部分的Debugger API是由平台基本Debugger提供的,平台基础Debugger也被叫做Debug model presentation和Debug UI utility classes。Java debug UI API重点放在访问启动中的源定位器和Java启动结构标签。 org.eclipse.jdt.debug.ui.launchConfigurations包定义了配置标签,这些配置标签用于本地和远程的Java应用
运行一个Java程序
JDT Debug组件包含了一些工具,这些工具用来启动一个使用了虚拟机的Java程序,这是用户为对应的Java project配置的。
启动一个编译好的Java程序
被编译好的Java project可以使用适当的IVMRunner运行,也能通过类名运行类。下面的代码片段展示了在myJavaProject中的MyClass是怎么被启动的。
IVMInstall vmInstall = JavaRuntime.getVMInstall(myJavaProject);
if (vmInstall == null)
vmInstall = JavaRuntime.getDefaultVMInstall();
if (vmInstall != null) {
IVMRunner vmRunner = vmInstall.getVMRunner(ILaunchManager.RUN_MODE);
if (vmRunner != null) {
String[] classPath = null;
try {
classPath = JavaRuntime.computeDefaultRuntimeClassPath(myJavaProject);
} catch (CoreException e) { }
if (classPath != null) {
VMRunnerConfiguration vmConfig =
new VMRunnerConfiguration("MyClass", classPath);
ILaunch launch = new Launch(null, ILaunchManager.RUN_MODE, null);
vmRunner.run(vmConfig, launch, null);
}
}
}
另外一个启动Java程序的方法是创建一个 Java application的启动配置,跟着启动它。下面的代码片段展示了myJavaProject中的MyClass是怎么通过使用一个简单的启动配置被启动的。使用一个默认的方式:最终的运行应用使用关联在myJavaProject中的JRE和classpath
ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
ILaunchConfigurationType type = manager.getLaunchConfigurationType(IJavaLaunchConfigurationConstants.ID_JAVA_APPLICATION);
ILaunchConfigurationWorkingCopy wc = type.newInstance(null, "SampleConfig");
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, "myJavaProject");
wc.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, "myClass");
ILaunchConfiguration config = wc.doSave();
config.launch(ILaunchManager.RUN_MODE, null);
如想自己扩展Eclipse Debuger,可以参考如下文章
How to write an Eclipse debugger
http://www.eclipse.org/articles/Article-Debugger/how-to.html