Có, bạn có thể, trên Scala 2.8. Lưu ý rằng, để điều này hoạt động, bạn phải bao gồm scala-compiler.jar trong classpath của mình. Nếu bạn gọi chương trình scala của mình bằng scala, nó sẽ được thực hiện tự động (hoặc có vẻ như trong các thử nghiệm tôi đã thực hiện).
Sau đó, bạn có thể sử dụng nó như thế này:
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)
}
}
}
Bạn có thể chuyển nhiều DebugParamđối số. Khi REPL xuất hiện, giá trị ở bên phải sẽ được liên kết với một val có tên mà bạn đã cung cấp ở bên trái. Ví dụ: nếu tôi thay đổi dòng đó như thế này:
breakIf(i == 5, DebugParam("j", i))
Sau đó, quá trình thực thi sẽ diễn ra như thế này:
C:\Users\Daniel\Documents\Scala\Programas>scala TestDebugger
0
1
2
3
4
j: Int
scala> j
res0: Int = 5
Bạn tiếp tục thực hiện bằng cách gõ :quit.
Bạn cũng có thể vô điều kiện thả vào REPL bằng cách gọi break, mà nhận được một Listsố DebugParamthay vì một vararg. Đây là một ví dụ đầy đủ, mã và thực thi:
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)
}
}
}
Và sau đó:
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>