Java 如何为JDI启动连接器指定类路径;使用Eclipse?

Java 如何为JDI启动连接器指定类路径;使用Eclipse?,java,debugging,classpath,connector,launching,Java,Debugging,Classpath,Connector,Launching,我所做的基本上和电影的原始海报一样。在我的例子中,我尝试在OS X 10.8.5上的Eclipse开普勒中运行Sun/Oracle JPDA示例程序,并使用Oracle jdk1.7.072。然而,这些示例的文档似乎假定它们将从命令行运行 我想使用com.sun.jdi.connect.LaunchingConnector来启动debuggee程序。它需要类映射的参数。其中一个映射项具有键“main”,其关联对象包含一个作为调试对象主类名的字符串。在我的例子中,这就是“debuggee.Debu

我所做的基本上和电影的原始海报一样。在我的例子中,我尝试在OS X 10.8.5上的Eclipse开普勒中运行Sun/Oracle JPDA示例程序,并使用Oracle jdk1.7.072。然而,这些示例的文档似乎假定它们将从命令行运行

我想使用com.sun.jdi.connect.LaunchingConnector来启动debuggee程序。它需要类映射的参数。其中一个映射项具有键“main”,其关联对象包含一个作为调试对象主类名的字符串。在我的例子中,这就是“debuggee.DebuggerTest”。调用启动的程序具有主类“debugger.TraceLaunch”

我的Eclipse项目具有默认结构,因此有一个名为“classes”的文件夹,每个包都有一个子文件夹。在我的例子中,它们是“com”、“debugger”和“debuggee”。“com”包包括来自“”的所有类

我正在使用上面引用的帖子中引用的“”来进行发布。发射失败;它报告找不到我的主类“debuggee.DebuggerTest”。如果我尝试将完整路径作为主类名的一部分,它也会失败

如果我打开一个终端并导出一个CLASSPATH变量,该变量指定Eclipse项目(和JDI库)中的“classes”文件夹,我可以使用命令“java debuggee.DebuggerTest”启动调试对象,并且它可以正确运行。我还可以使用命令“javadebugger.TraceLaunch”启动调试器,然后它又成功地启动了调试对象。这表明VMLauncher正在做所有正确的事情

因此,问题似乎在于,在示例包或Oracle“tools.jar”中的JDI包的深处,LaunchingConnector调用了一个命令行启动器。它似乎属于SunCommandLineLauncher类。该启动器似乎采用了类路径。启动器参数似乎没有文档记录,所以我不知道是否有指定类路径的选项。OracleJDK1.7.0JDI类(在“lib/tools.jar”中)的源代码显然尚未发布,因此我无法查看代码以了解启动器如何使用其参数的详细信息

另一个可能有用的线索是:在示例JDI应用程序中,GUI调试器示例允许指定它试图解析的类路径。不幸的是,它不能像UNIX shell那样识别引号或字符转义,也不能理解包含空格字符的文件夹名称

理想情况下,我想知道如何指定LaunchingConnector的类路径


我的第二个选择是一些更一般的建议,说明如何在调整命令行程序以在Eclipse中运行时指定类路径。

由跟踪创建的新VM具有不同的类路径。如果要在eclipse中运行该程序,需要在跟踪程序中添加以下代码

Connector.Argument options =(Connector.Argument)arguments.get("options");
options.setValue("-cp \"F:\\Workspace\\TraceProgram\\bin\"");
其中-cp将类路径设置为新创建的VM,您需要更改为eclipse工作目录

它对我有用