1

我是 Java 新手,正在学习在 Eclipse 中进行调试。我收到一个奇怪的错误,其中调试器第一次无法进入函数,但第二次成功。具体来说,这是我的步骤。

  1. 跨步直到我达到我想要检查的功能。
  2. 进入函数。这是我遇到错误“找不到源”的时候。
  3. 步退。调试器成功返回到上面的上一个堆栈帧。
  4. 再次进入函数。奇怪的是,这次踏入作品。

有什么问题?为什么需要两个“步骤”来检查我想要的功能?

4

2 回答 2

1

当一行中有两个语句并且内部语句没有源(例如裸露的 JRE)时,可能会发生这种情况。

myObject.myMethod(someObject.toString());

在这一行中,第一步进入,将进入内部对象的 toString() 方法(可能没有可用的源),第二步进入将进入您自己的方法(将有代码) .

解决这个问题的方法(如果它发生在常规 Java 运行时类中)是为您的项目使用完整的 JDK而不是 JRE,并遵循良好的编码实践并将内部语句移动到变量中,以便每一行都执行一个事情(优化器应该确保这样做不会造成性能损失)。

于 2012-05-15T16:18:56.313 回答
1

如果你有这样的行:

func1(obj.func2());

调试器首先进入 obj.func2() 如果它是第三方源代码或 java src 并且您使用 jre,您可能会错过此源代码并且 eclipse 将无法附加源代码进行调试(使用 maven!=))。

在下一个“步入”中,您将进入 func1

于 2012-05-15T16:19:32.203 回答