我想调试包含两个最简单类的非常简单的代码。
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
System variables in Environment variables
答案 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
启用和禁用步过滤。