我想调试包含两个最简单类的非常简单的代码。
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
我在Eclipse IDE for Java EE Developers和Eclipse IDE for Java Developers上进行了测试,我还从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
发布于 2018-11-16 07:06:31
您试图输出this,这意味着对此对象的引用,但试图从创建此对象的构造函数调用它。尝试在另一个方法中的构造函数之后调用此代码。
Debug可能因为空引用异常而崩溃,这会导致调用堆栈错误,这就是程序立即崩溃的原因。
发布于 2018-11-16 07:35:44
首先,到目前为止,您做的一切都是正确的。
这个“错误”,如果你想这么说的话,在你点击F5的时候就会出现。现在这个命令被称为step into,这意味着它将在下一个更深的堆栈层继续执行。
从代码中,您假设这将是TestClassTwo的构造函数,但是在java可以调用构造函数之前,它首先必须初始化类本身,这正是图片中的Debug View所指示的。
附带问题:为了深入了解ClassLoader.loadClass(),您是否多次按下了F5
对于当前执行,您可以选择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的步骤过滤的选项。
https://stackoverflow.com/questions/53328970
复制相似问题