我有一个在Sun java 6 JVM中在tomcat下运行的java Web应用程序.有没有办法将scala或clojure REPL附加到正在运行的JVM?
一旦webapp启动并运行,就会在正在运行的VM中设置要进行调用的上下文.因此,这对于调用增量,探索性开发和调试的任意java方法调用非常有用.
我正在尝试使用jEdit作为编写Scala代码的主编辑器.
沿着jEdit,我正在使用Apache Buildr和DTerm.这一切都运行良好,除了我真的不确定如何在大型IDE之外调试Scala应用程序?
是否有推荐的实践/工具用于在IDE之外进行调试?
我希望能够以交互方式在我的Java应用程序中操作内存中的对象以进行调试.我非常希望使用Scala的2.8解释器,利用tab-completion等功能.我该怎么做呢?
我不知道如何编写允许将解释器放入Scala 2.9代码的代码.这个问题是一个后续这一块,这要求斯卡拉相当于什么,
import pdb
pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
来自Python.那里给出的建议主要是针对Scala 2.8,相关的包不再存在于以前的形式中.也就是说,
scala.nsc.tools.nsc.Interpreter.{break, breakIf}
已被转移到 scala.nsc.tools.nsc.interpreter.ILoop.{break, breakIf}
DebugParam
现在NamedParam
在scala.tools.nsc.interpreter中正如原始帖子中所述,父进程的类路径不会自动传递给新的解释器,因此这里提供了一种解决方法.不幸的是,那里调用的许多类/方法现在已经改变了,我不太确定如何修改代码表现为"预期".
谢谢!
编辑:这是我的测试代码,在当前编译和运行,但尝试在调试器中执行任何操作导致应用程序冻结,如果编译scalac
和执行scala
import scala.tools.nsc.interpreter.ILoop._
object Main extends App {
case class C(a: Int, b: Double, c: String) {
def throwAFit(): Unit = {
println("But I don't wanna!!!")
}
}
// main
override def main(args: Array[String]): Unit = {
val c = C(1, 2.0, "davis")
0.until(10).foreach {
i =>
println("i = " + i)
breakIf(i …
Run Code Online (Sandbox Code Playgroud) 有什么工作解决方案可以放入REPL控制台与Scala 2.10?
这主要用于调试目的 - 我想在执行过程中暂停,并且有一个REPL控制台,我可以在当前执行状态下使用程序中的复杂表达式检查值并测试程序的逻辑.那些使用Ruby编程的人可能知道类似的功能:binding.pry
.
AFAIK,Scala 2.9及以下曾经有过,breakIf
但它已从更高版本中删除.使用ILoop
似乎是新的方式,但由于sbt
没有将scala-library添加到类路径而引入了问题.
像这样和这样的几个解决方案似乎提供了一个很好的解决方法,但我的观点是必须有一个解决方案,我不必花费数小时甚至数天来使REPL工作.
简而言之,涉及更多的样板步骤 - 与此相反,binding.pry
这只是一行代码,没有额外的样板.
我不知道在执行程序作为sbt任务时是否存在问题,而不是直接运行程序可执行文件,但出于开发目的,我正在运行并使用sbt任务测试我的程序.
我想从命令行启动Scala Swing应用程序,然后在应用程序启动后,放入Scala REPL以用作控制接口.
理想情况下,我还想预先绑定一些变量名称.更好的是为REPL使用Java2D终端仿真器,但我找不到合适的东西.
Scala REPL是否有公共API?
基于一个线程和Scala解释器来源,它看起来并不难以获得相同的
def runLine(line: String): String
Run Code Online (Sandbox Code Playgroud)
但有人写过这个吗?
我正在使用Scala 2.11.8
和Spark 2.1.0
.我对Scala完全不熟悉.
是否有一种简单的方法来添加单行断点,类似于Python:
import pdb; pdb.set_trace()
Run Code Online (Sandbox Code Playgroud)
我将被放入Scala shell中,我可以检查脚本中执行行的内容是什么?(我也很满意脚本的结尾......)
我目前正在开始我的脚本:
$SPARK_HOME/bin/spark-submit --class "MyClassName" --master local target/scala-2.11/my-class-name_2.11-1.0.jar
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?将极大地帮助调试.
编辑:这个其他SO帖子的解决方案不是很有帮助/需要很多样板+不起作用.
scala ×9
debugging ×3
interpreter ×2
scala-2.10 ×2
api ×1
clojure ×1
java ×1
jvm ×1
sbt ×1
workflow ×1