Scala IDE Debugger"进入"行为

时间:2012-08-25 15:42:14

标签: debugging scala

当前行为:

  • case Twice(n) ...行上设置断点。
  • 在“步入”控件转到x match {
  • 在“步入”控件转到def TwiceTest = {
  • 进一步“步入”控件转到if (z % 2 == 0)...行。

预期行为:

  • case Twice(n) ...行上设置断点。
  • 在“步入”控件转到if (z % 2 == 0)...行。

代码段

object testobj extends App {
  def TwiceTest = {
    val x = Twice(21)
    x match {
      case Twice(n) => Console.println(n)
    } // prints 21
  }

  TwiceTest

}

object Twice {
  def apply(x: Int): Int = x * 2
  def unapply(z: Int): Option[Int] = {
    if (z % 2 == 0) Some(z / 2) else None
  }
}

调试带有大量嵌套提取器的scala程序时,当前行为很烦人。我尝试使用新的Scala调试器以及Java调试器,但结果相同。

在这种情况下,

Step Filtering也无济于事。

作为一种解决方法,我在unapply方法中放置一个断点并从第一个断点运行resume。有人可以建议我一个更清洁的方法。

修改1 我使用的是Scala-IDE(最新的每晚版本.2.1.0.nightly-2_09-201208250315-529cd70)

Eclipse版本:Indigo Service Release 2 Build id:20120216-1857

操作系统:Windows 7(64位)

1 个答案:

答案 0 :(得分:0)

字节码中的行号信息错误。这不是IDE的问题,而是Scala编译器。编译模式匹配时,合成代码有时会得到错误的位置信息。

我假设您使用的是Scala 2.9.2。在Scala的下一个版本(2.10.0)中,模式匹配器有了显着的改进,所以尝试一下会很好。