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 List
số DebugParam
thay 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>