我做的事与this question的原始海报基本相同。就我而言,我试图在OS X 10.8.5上使用Oracle jdk1.7.0_72在Eclipse Kepler中运行Sun / Oracle JPDA示例程序。但是,这些示例的文档似乎假设它们将从命令行运行。
我想使用com.sun.jdi.connect.LaunchingConnector启动debuggee程序。它需要类Map< String,Argument>的参数。其中一个地图条目有关键" main"及其关联对象包含一个String,它是调试对象的主类名。就我而言,那就是" debuggee.DebuggerTest"。调用启动的程序有主类" debugger.TraceLaunch"。
我的Eclipse项目具有默认结构,因此有一个名为&#34的文件夹;类"每个包的子文件夹。就我而言,这些是" com","调试器"和"调试对象"。 " 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中运行时如何指定类路径的一些更一般的建议。
答案 0 :(得分:5)
Trace创建的新VM具有不同的类路径。如果你想在eclipse中运行程序,你需要在跟踪程序中添加以下代码。
Connector.Argument options =(Connector.Argument)arguments.get("options");
options.setValue("-cp \"F:\\Workspace\\TraceProgram\\bin\"");
其中-cp设置新创建的VM的类路径,您需要更改到您的eclipse工作目录。
这对我有用。