【问题标题】:Eclipse breakpoint in single / one line lambda?单/单行 lambda 中的 Eclipse 断点?
【发布时间】:2016-04-24 20:57:12
【问题描述】:

如何在单行 lambda 中设置断点?

例如我希望 (eclipse) 调试器在调用 outer.doSth(event) 时停止:

observable.addCallback(event-> outer.doSth(event));

【问题讨论】:

  • 遗憾的是没有格式化就没有办法
  • 另一种方法是将断点放在doSth 方法中。
  • 好吧,你可以在包含 lambda 表达式的行设置一个断点,但必须接受这样一个事实,即在调用 addCallback 和调用 doSth 之前,执行将在两个点处停止.这与任何其他的表达式嵌套没有什么不同。如果要区分,请插入换行符...
  • @Holger intellij 你可以。
  • 现在在 eclipse bugzilla 上以 bug 486264 的身份打开。

标签: java eclipse debugging lambda java-8


【解决方案1】:

你不能。

如果你像这样重构它:

observable.addCallback(event-> {
    return outer.doSth(event);
});

你可以。

【讨论】:

  • 无需将 lambda 表达式转换为冗长的语法。如果您在-> 之后插入换行符,它也可以使用event-> outer.doSth(event)
【解决方案2】:

这个答案不适用于 eclipse,但在 intellij 你可以 (15.x)

您可以选择在行(这是图像中的第一个选项)、第一个 lambda 或第二个 lambda 处设置断点。以此类推。

【讨论】:

  • 如何触发该选项?
  • 只需点击那一行(与写行号的地方相邻)
  • 我正在使用 android studio,我希望这样的功能能够从 intelliJ 进入 AS,但是唉……我仍然得到整行的断点。不过感谢您的回复!
  • 哦。我不知道。但我认为在 android studio 中也应该可以。
  • 我在过去的 10 分钟里一直在尝试这个,似乎 AS 不时触发 lambda 提示,只是添加了一个常规断点。我发现的解决方法是单击带有向上箭头的 lambda 符号,它会将您带到负责的界面,然后导航回 lambda 表达式。如果我在那之后尝试设置断点,它总是 lambda 提示符。
【解决方案3】:

在 Eclipse 4.14.0 中,当我在 lambda 中设置断点时,它会自动正确工作,并且我能够调试 lambda 表达式。但请注意,Eclipse 也会在“行”本身的断点处停止(即在执行流操作之前,因为它是惰性的):

在这里你看到我可以看到group 变量的值:

因此您不必重新格式化您的代码。

【讨论】:

    【解决方案4】:

    只是让@Holger 's评论this answer一个答案:

    ->之后换行就够了

    observable.addCallback(event-> 
              outer.doSth(event) //line break works here!
    );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多