Зайти в переводчик в произвольное место кода на Scala
Я пришел из мира Python, где в любой момент в моем коде я могу добавить
import pdb; pdb.set_trace()
и во время выполнения я буду брошен в интерактивный интерпретатор в этом месте. Есть ли эквивалент для scala, или это невозможно во время выполнения?
3 ответов:
Да, вы можете, на Scala 2.8. Обратите внимание, что для этого вам нужно включить Scala-компилятор.jar в вашем classpath. Если вы вызываете свою программу 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вместо с переменным числом аргументов. Вот полный пример, код и выполнение: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>
чтобы добавить к ответу Даниэля, начиная со Scala 2.9,
breakиbreakIfметоды, содержащиеся вscala.tools.nsc.interpreter.ILoop. Кроме того,DebugParamТеперьNamedParam.
IntelliJ идея:
- запуск в режиме отладки или подключение удаленного отладчика
- установите точку останова и бегите, пока не достигнете ее
- открыть
Evaluate Expression( Alt+F8 в меню: Run -> проверить выражение) окно для запуска произвольного кода на Scala.- введите фрагмент кода или выражение, которое вы хотите запустить, и нажмите кнопку Оценить
- тип Alt+V или нажмите кнопку на вычислить, чтобы запустить фрагмент кода.
затмение:
по состоянию на Scala 2.10 оба
breakиbreakIfбыли удаленыILoop.для взлома интерпретатора вам придется работать с
ILoopнапрямую.добавить
scala compilerбиблиотека. Для Eclipse Scala щелкните правой кнопкой мыши на project =>Build Path=>Add Libraries...=>Scala Compiler.и тогда вы можете использовать следующее, Где вы хотите запустить интерпретатор:
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()в Eclipse Scala интерпретатор может быть использован из
Consoleview:


Comments