我是 Java 新手,正在学习在 Eclipse 中进行调试。我收到一个奇怪的错误,其中调试器第一次无法进入函数,但第二次成功。具体来说,这是我的步骤。
- 跨步直到我达到我想要检查的功能。
- 进入函数。这是我遇到错误“找不到源”的时候。
- 步退。调试器成功返回到上面的上一个堆栈帧。
- 再次进入函数。奇怪的是,这次踏入作品。
有什么问题?为什么需要两个“步骤”来检查我想要的功能?
当一行中有两个语句并且内部语句没有源(例如裸露的 JRE)时,可能会发生这种情况。
myObject.myMethod(someObject.toString());
在这一行中,第一步进入,将进入内部对象的 toString() 方法(可能没有可用的源),第二步进入将进入您自己的方法(将有代码) .
解决这个问题的方法(如果它发生在常规 Java 运行时类中)是为您的项目使用完整的 JDK而不是 JRE,并遵循良好的编码实践并将内部语句移动到变量中,以便每一行都执行一个事情(优化器应该确保这样做不会造成性能损失)。
如果你有这样的行:
func1(obj.func2());
调试器首先进入 obj.func2() 如果它是第三方源代码或 java src 并且您使用 jre,您可能会错过此源代码并且 eclipse 将无法附加源代码进行调试(使用 maven!=))。
在下一个“步入”中,您将进入 func1