【发布时间】:2015-01-24 06:21:34
【问题描述】:
我所做的与this question 的原始海报基本相同。就我而言,我正在尝试在 OS X 10.8.5 上的 Eclipse Kepler 中使用 Oracle jdk1.7.0_72 运行 Sun/Oracle JPDA 示例程序。但是,这些示例的文档似乎假定它们将从命令行运行。
我想使用 com.sun.jdi.connect.LaunchingConnector 来启动调试对象程序。它需要类 Map
我的 Eclipse 项目具有默认结构,因此有一个名为“classes”的文件夹,其中每个包都有一个子文件夹。就我而言,它们是“com”、“debugger”和“debuggee”。 “com”包中包含“Example JDI Applications”中的所有类。
我正在使用上面引用的帖子中引用的“VMLauncher”来进行启动。发射失败;它报告找不到我的主类“debuggee.DebuggerTest”。如果我尝试将完整路径包含在我的主类名中,它也会失败。
如果我打开一个终端并导出一个 CLASSPATH 变量,该变量指定我的 Eclipse 项目(和 JDI 库)中的“类”文件夹,我可以使用命令“java debuggee.DebuggerTest”启动调试对象,它运行正常。我还可以使用命令“java debugger.TraceLaunch”启动调试器,然后它又会成功启动调试对象。这表明 VMLauncher 正在做所有正确的事情。
因此,问题似乎在于,在 Oracle 的“tools.jar”中的示例包或 JDI 包的深处,LaunchingConnector 调用了命令行启动器。它似乎属于 SunCommandLineLauncher 类。该启动器似乎假定了一个类路径。启动器参数似乎没有记录,所以我不知道是否有指定类路径的选项。 Oracle jdk1.7.0 JDI 类的源代码(在“lib/tools.jar”中)显然尚未发布,因此我无法查看代码以了解启动器如何使用其参数的详细信息。
另一个可能有用的线索:在示例 JDI 应用程序中,GUI 调试器示例允许指定一个类路径,它会尝试对其进行解析。不幸的是,它不能像 UNIX shell 那样识别引用或字符转义,并且它不理解包含空格字符的文件夹名称。
理想情况下,我想知道如何为 LaunchingConnector 指定类路径。
我的第二个选择是在调整命令行程序以在 Eclipse 中运行时如何指定类路径的一些更一般的建议。
【问题讨论】:
标签: java debugging classpath connector launching