임의의 스칼라 코드 위치 동안 인터프리터에 드롭
저는 Python 배경에서 왔으며 코드의 어느 시점에서든 추가 할 수 있습니다.
import pdb; pdb.set_trace()
그리고 런타임에 나는 그 지점에서 인터랙티브 인터프리터로 떨어질 것입니다. 스칼라에 상응하는 것이 있습니까, 아니면 런타임에 불가능합니까?
예, Scala 2.8에서 가능합니다. 이 작업을 수행하려면 클래스 경로에 scala-compiler.jar을 포함해야합니다. 를 사용하여 스칼라 프로그램을 호출하면 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
대신 가변 인자의. 다음은 전체 예제, 코드 및 실행입니다.
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>
Daniel의 답변에 추가하기 위해 Scala 2.9부터 break
및 breakIf
메서드는 scala.tools.nsc.interpreter.ILoop
. 또한 DebugParam
현재 NamedParam
입니다.
IntelliJ IDEA :
- 디버그 모드에서 실행하거나 원격 디버거 연결
- 중단 점을 설정하고 도달 할 때까지 실행
Evaluate Expression
( Alt+ F8, 메뉴 : Run-> Evaluate Expression) 창을 열어 임의의 Scala 코드를 실행합니다.- 실행할 코드 조각 또는 표현식을 입력하고 평가를 클릭하십시오.
- Alt+를 입력 V하거나 평가를 클릭하여 코드 조각을 실행합니다.
식:
As of Scala 2.10 both break
and breakIf
have been removed from ILoop
.
To break into interpreter you will have to work with ILoop
directly.
First add scala compiler
library. For Eclipse Scala, right click on project => Build Path
=> Add Libraries...
=> Scala Compiler
.
And then you can use the following where you want to start the interpreter:
import scala.tools.nsc.interpreter.ILoop
import scala.tools.nsc.interpreter.SimpleReader
import scala.tools.nsc.Settings
val repl = new ILoop
repl.settings = new Settings
repl.settings.Yreplsync.value = true
repl.in = SimpleReader()
repl.createInterpreter()
// bind any local variables that you want to have access to
repl.intp.bind("row", "Int", row)
repl.intp.bind("col", "Int", col)
// start the interpreter and then close it after you :quit
repl.loop()
repl.closeInterpreter()
In Eclipse Scala the interpreter can be used from the Console
view:
'Program Tip' 카테고리의 다른 글
심볼 테이블이란? (0) | 2020.10.05 |
---|---|
Emacs : 시작시 마지막 세션에서 버퍼를 다시여시겠습니까? (0) | 2020.10.05 |
Java 용 Fake File System 프레임 워크가 있습니까? (0) | 2020.10.05 |
진행률 표시 줄의 숫자는 Spark-shell에서 무엇을 의미합니까? (0) | 2020.10.05 |
코드를 작성하기 전에 애플리케이션의 아키텍처를 어떻게 계획합니까? (0) | 2020.10.05 |