Oui, vous pouvez, sur Scala 2.8. Notez que, pour que cela fonctionne, vous devez inclure le scala-compiler.jar dans votre chemin de classe. Si vous invoquez votre programme scala avec scala
, cela se fera automatiquement (du moins il semble dans les tests que j'ai effectués).
Vous pouvez ensuite l'utiliser comme ceci:
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)
}
}
}
Vous pouvez passer plusieurs DebugParam
arguments. Lorsque le REPL apparaît, la valeur à droite sera liée à un val dont vous avez fourni le nom à gauche. Par exemple, si je change cette ligne comme ceci:
breakIf(i == 5, DebugParam("j", i))
Ensuite, l'exécution se déroulera comme ceci:
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int
scala> j
res0: Int = 5
Vous continuez l'exécution en tapant :quit
.
Vous pouvez également passer inconditionnellement dans REPL en invoquant break
, qui reçoit un List
of DebugParam
au lieu d'un vararg. Voici un exemple complet, code et exécution:
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)
}
}
}
Puis:
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>