【问题标题】:How do I specify the classpath for a JDI launching connector; using Eclipse?如何为 JDI 启动连接器指定类路径;使用 Eclipse?
【发布时间】: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 的参数。其中一个映射条目具有键“main”,并且其关联对象包含一个字符串,该字符串是被调试对象的主类名称。就我而言,那是“debuggee.DebuggerTest”。调用启动的程序有主类“debugger.TraceLaunch”。

我的 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


    【解决方案1】:

    由 Trace 创建的新 VM 具有不同的类路径。如果你想在eclipse中运行程序,你需要在你的trace程序中添加如下代码。

    Connector.Argument options =(Connector.Argument)arguments.get("options");
    options.setValue("-cp \"F:\\Workspace\\TraceProgram\\bin\"");
    

    其中-cp设置新创建VM的类路径,你需要切换到你的eclipse工作目录。

    它对我有用。

    【讨论】:

      猜你喜欢
      • 2014-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-06
      • 2012-12-31
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多