Да, вы можете, на 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, значение справа будет привязано к значению, имя которого вы указали слева. Например, если я изменю эту строку следующим образом:
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
.
Вы также можете безоговорочно перейти в REPL, вызвав break
, который получает List
из DebugParam
вместо vararg. Вот полный пример, код и выполнение:
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>