Sí, puede hacerlo en Scala 2.8. Tenga en cuenta que, para que esto funcione, debe incluir scala-compiler.jar en su classpath. Si invoca su programa scala con scala
, se hará automáticamente (o eso parece en las pruebas que hice).
Luego puede usarlo así:
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)
}
}
}
Puede pasar varios DebugParam
argumentos. Cuando aparezca el REPL, el valor de la derecha estará vinculado a un valor cuyo nombre proporcionó a la izquierda. Por ejemplo, si cambio esa línea así:
breakIf(i == 5, DebugParam("j", i))
Entonces la ejecución sucederá así:
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int
scala> j
res0: Int = 5
Continúa la ejecución escribiendo :quit
.
También puede caer incondicionalmente en REPL invocando break
, que recibe un List
de en DebugParam
lugar de un vararg. Aquí hay un ejemplo completo, código y ejecución:
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)
}
}
}
Y entonces:
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>