在Eclipse中调试Java会立即停止而不会出现断点

时间:2018-11-15 22:49:36

标签: java eclipse ide java-7 breakpoints

我想调试包含两个最简单类的非常简单的代码。

package test.pack;

public class TestClass {

    public static void main(String[] args) {
        TestClassTwo tc2 = new TestClassTwo();
    }

}

================================================ ===

package test.pack;

public class TestClassTwo {

    public TestClassTwo() {
        System.out.println(this);
    }

}

================================================ ===

因此,当我在类TestClassTwo的初始化上打开断点并通过[F11]和[F5]运行调试时,我应该进入TestClassTwo的构造函数。 但是,不是在我未设置任何断点的地方点击此断点。 It is shown on this pic

我在[适用于Java EE开发人员的Eclipse IDE]和[适用于Java开发人员的Eclipse IDE]上进行了尝试,我还从官方Oracle网站下载并安装了最新版本的JDK。

但是有一个限制,就是我应该根据业务方面的技术任务在我的项目中使用Java版本1.7。

我正在尝试使用该主题的解决方案 Debug hit without breakpoint - Eclipse,但没有帮助。

接下来,我附上可以以某种方式帮助解决我的问题的屏幕截图。

Java library in settings of project

Installed JRE in preferences of Eclipse

Java version in cmd

System variables in Environment variables

System variables in Environment variables also

Windows version

2 个答案:

答案 0 :(得分:0)

您尝试输出此内容,这意味着对此对象进行了引用,但是尝试从构造函数中调用它,从而创建了该对象。尝试使用其他方法在构造函数之后调用此代码。

调试可能由于空引用异常而崩溃,这会导致调用堆栈中的错误,这就是程序立即崩溃的原因。

答案 1 :(得分:0)

首先,到目前为止,您已进行了所有纠正。

“错误”(如果您想这样称呼)是在您按下F5时出现的。现在,该命令称为step into,这意味着它将在下一个更深的堆栈层继续执行。

从代码中您假设这将是TestClassTwo的构造函数,但是在Java调用构造函数之前,它首先必须初始化类本身,而这正是图片中的Debug View指示。

侧面问题:您是否多次按F5来深入了解ClassLoader.loadClass()


对于当前执行,您可以在Debug View中选择倒数第二行,

Launcher$AppClassLoader(ClassLoader).loadClass(String) line: not available

,然后点击F7。这将step out的相应方法继续在上一个堆栈层上继续执行,在该堆栈层上应接着调用TestClassTwo的构造函数。


对于将来的调试,您可能需要熟悉Step Filtering。使用步骤过滤器,您可以排除代码的某些部分来进行调试。它们将被执行,但是eclipse会自动“跳过”它们。

在相应的首选项页面Java > Debug > Step Filtering中,eclipse方便地提供了一个选项,可以分别为java.lang.ClassLoader启用和禁用步过滤。