Sì, puoi, su Scala 2.8. Nota che, affinché funzioni, devi includere scala-compiler.jar nel tuo classpath. Se invocate il vostro programma scala con scala
, sarà fatto automaticamente (o almeno così sembra nei test che ho fatto).
Puoi quindi usarlo in questo modo:
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)
}
}
}
Puoi passare più DebugParam
argomenti. Quando viene visualizzato il REPL, il valore a destra sarà associato a un val di cui hai fornito il nome a sinistra. Ad esempio, se cambio quella riga in questo modo:
breakIf(i == 5, DebugParam("j", i))
Quindi l'esecuzione avverrà in questo modo:
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int
scala> j
res0: Int = 5
Continui l'esecuzione digitando :quit
.
Puoi anche entrare incondizionatamente in REPL invocando break
, che riceve un List
di DebugParam
invece di un vararg. Ecco un esempio completo, codice ed esecuzione:
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)
}
}
}
E poi:
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>