【发布时间】:2020-09-07 21:31:18
【问题描述】:
我是一名具有强大 C++ 背景的程序员,但对 Java 世界很陌生。现在我有一个关于调试的问题。
如何使用 Eclipse IDE 调试预编译的 Java .class 文件?而且我发现通过谷歌搜索找到答案确实不是一件容易的事。
为了让我的问题真正准确且不误导,我将其阐述如下。
我在下面有两个 .java 源文件:
$
├── src
│ └── mypkg1
│ └── Timeline.java
└── test
└── mypkg1
└── TimelineTest.java
在根文件夹($)中,我可以使用两个命令编译和运行TimelineTest.java:
javac -classpath ./src test/mypkg1/TimelineTest.java
java -classpath ./src:./test mypkg1.TimelineTest
现在我有$/test/mypkg1/TimelineTest.class,其中包含 Java 字节码。
那么如何在TimelineTest.class 上进行源码级调试呢?
我试过了,但还没有成功。我创建了一个 Eclipse 项目为$/test/mypkg1/.project,然后为它创建一个调试配置,如下所示。但是,当开始调试时,我收到红色错误消息:
错误:无法找到或加载主类 TimelineTest
原因:java.lang.NoClassDefFoundError: mypkg1/TimelineTest(错误 名称:时间线测试)
那么正确的做法是什么?
这里的关键要求是,我不应该费心做冗长的 Eclipse 项目设置,鼠标在这里和那里点击数百次。我想要的是快速加载二进制文件并开始调试。你知道,这在 C++ 世界中绝对是正确的。例如,使用 Visual Studio IDE,文件 → 打开项目 → 选择一个 EXE 文件作为项目文件,这就是您告诉 VS IDE 调试该 EXE 的方式。打开“项目”后,按F10,调试器在main()的第一行停止被调试对象,就这么简单。
如何使用 Eclipse 实现相同的目标?或者,推荐其他一些可行的 Java 调试器?
== Timeline.java ==
package mypkg1;
public class Timeline {
private int fetchCount;
public void setFetchCount(int fetchCount) {
this.fetchCount = fetchCount;
}
public int getFetchCount() {
return fetchCount;
}
}
== TimelineTest.java ==
package mypkg1;
public class TimelineTest {
public static void main(String[] args) {
Timeline timeline = new Timeline();
int expected = 5;
timeline.setFetchCount(expected);
int actual = timeline.getFetchCount();
System.out.println("Fetch = "+actual);
}
}
【问题讨论】: