是的,在 Scala 2.8 上可以。请注意,要使其工作,您必须在类路径中包含 scala-compiler.jar。如果您使用以下命令调用 scala 程序scala
,它将自动完成(或者在我所做的测试中似乎如此)。
然后你可以像这样使用它:
import scala.tools.nsc.Interpreter._
object TestDebugger {
def main(args: Array[String]) {
0 to 10 foreach { i =>
breakIf(i == 5, DebugParam("i", i))
println(i)
}
}
}
您可能会通过多个DebugParam
论据。当 REPL 出现时,右侧的值将绑定到您在左侧提供的名称的 val。例如,如果我像这样更改该行:
breakIf(i == 5, DebugParam("j", i))
然后执行将如下所示:
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int
scala> j
res0: Int = 5
您可以通过键入继续执行:quit
.
您还可以通过调用无条件进入 REPLbreak
,它接收到一个List
of DebugParam
而不是可变参数。这是完整的示例、代码和执行:
import scala.tools.nsc.Interpreter._
object TestDebugger {
def main(args: Array[String]) {
0 to 10 foreach { i =>
breakIf(i == 5, DebugParam("j", i))
println(i)
if (i == 7) break(Nil)
}
}
}
进而:
C:\Users\Daniel\Documents\Scala\Programas>scalac TestDebugger.scala
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int
scala> j
res0: Int = 5
scala> :quit
5
6
7
scala> j
<console>:5: error: not found: value j
j
^
scala> :quit
8
9
10
C:\Users\Daniel\Documents\Scala\Programas>