当前位置: 首页 > 知识库问答 >
问题:

如何调试使用Eclipse IDE编译Java. class文件的命令行?

国跃
2023-03-14

我是一名具有强大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/。项目,然后为其创建调试配置,如下所示。但是,当开始调试时,我收到一条红色错误消息:

错误:无法找到或加载主类TimelineTest

导致错误的原因:java.lang.NoClassDefFoundError:mypkg1/TimelineTest(错误名称: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;
    }
}

== 时间轴测试.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);
    }
}

共有2个答案

夏骞尧
2023-03-14

您在这里遇到了一些问题。为此,您无需查看远程调试。

您需要编辑项目属性(右键单击资源管理器中的项目名称并选择“属性”)。您需要编辑“Java构建路径”。在“源”选项卡中,您需要有两个源目录,“src”和“test”。

当您这样做时,它会发现您有两个源文件,每个文件夹和包中都有一个。您可以展开文件夹以查看它们,或者您可以转到“导航”菜单并选择“打开类型”(并注意键盘快捷键以更快地到达那里)并输入您的类的名称。这将在代码编辑器中打开该类。

此时,假设该类具有具有正确签名的“main”方法,则可以在代码编辑器中右键单击并选择“调试为”,然后选择“Java 应用程序”。在执行此操作之前,您可能需要在“main”方法的第一行上设置断点。

谭梓
2023-03-14

您可以在启用远程调试的情况下运行代码,并将Eclipse调试器附加到正在运行的应用程序。

这里有相当详细的解释。

 类似资料:
  • 主要内容:SDKMAN!,创建和运行第一个程序,hello.kt,运行 REPL(交互式解释器),使用命令行执行脚本Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。 你可以选择一个最新的稳定版下载。 下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。 SDKMAN! 在 OS X、Linux、

  • Kotlin 命令行编译工具下载地址:https://github.com/JetBrains/kotlin/releases/tag/v1.1.2-2,目前最新为 1.1.2-2。 你可以选择一个最新的稳定版下载。 下载完成后,解压到指定目录,然后将 bin 目录添加到系统环境变量。bin 目录包含编译和运行 Kotlin 所需的脚本。 SDKMAN! 在 OS X、Linux、Cygwin、F

  • 我正在尝试对protobuf二进制文件进行原始解码。我从源代码中安装了google protobuf库https://github.com/google/protobuf我可以使用命令行来解码原始的protobuf二进制文件,使用命令

  • 编译可调试的目标文件 为了使得编译出来的代码是能够被gdb这样的调试器调试,我们需要在使用gcc编译源文件的时候添加参数:"-g"。这样编译出来的目标文件中才会包含可以用于调试器进行调试的相关符号信息。

  • 问题内容: 嗨,我一直在使用IDE,但是现在我需要从命令行运行和编译。 问题是我有多个软件包,并且试图找到答案,但是没有任何反应。 所以我有 您知道如何使用javac编译所有内容吗? 问题答案: 可以做到这一点(可能需要通过命令行开关添加其他classpath元素): 但是,如果您的构建过程变得更加复杂(而且将会!),则应考虑使用Apache Ant进行构建自动化。

  • 问题内容: 我需要在EasyPhp环境中启用pdo_mysql,因此转到php.ini文件并取消注释以下行: 不幸的是我仍然有同样的问题。我正在使用CLI,所以我想我需要找到CLI使用的php.ini文件。我如何找到它? 问题答案: 只需运行并在输出中查找CLI 所使用的位置