scala - 使用 Intellij 调试 Scala 宏

标签 scala macros intellij-idea

我有一个 sbt 项目,我运行“gen-idea”来设置它以与 Intellij 12.4 一起使用。在一个项目中是我的主要代码,另一个项目中有我的宏代码。尝试通过遵循 http://docs.scala-lang.org/overviews/macros/overview.html 通过测试文件调试我的宏时但抛出:

error: scala.reflect.internal.MissingRequirementError: object scala.runtime in compiler mirror not found.
at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16)
at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:48)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40)
at scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:61)
at scala.reflect.internal.Mirrors$RootsBase.getPackage(Mirrors.scala:172)
at scala.reflect.internal.Mirrors$RootsBase.getRequiredPackage(Mirrors.scala:175)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage$lzycompute(Definitions.scala:181)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackage(Definitions.scala:181)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass$lzycompute(Definitions.scala:182)
at scala.reflect.internal.Definitions$DefinitionsClass.RuntimePackageClass(Definitions.scala:182)
at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr$lzycompute(Definitions.scala:1015)
at scala.reflect.internal.Definitions$DefinitionsClass.AnnotationDefaultAttr(Definitions.scala:1014)
at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses$lzycompute(Definitions.scala:1144)
at scala.reflect.internal.Definitions$DefinitionsClass.syntheticCoreClasses(Definitions.scala:1143)
at scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode$lzycompute(Definitions.scala:1187)
at scala.reflect.internal.Definitions$DefinitionsClass.symbolsNotPresentInBytecode(Definitions.scala:1187)
at scala.reflect.internal.Definitions$DefinitionsClass.init(Definitions.scala:1252)
at scala.tools.nsc.Global$Run.<init>(Global.scala:1290)
at scala.tools.nsc.Driver.doCompile(Driver.scala:32)
at scala.tools.nsc.Main$.doCompile(Main.scala:79)
at scala.tools.nsc.Driver.process(Driver.scala:54)
at scala.tools.nsc.Driver.main(Driver.scala:67)
at scala.tools.nsc.Main.main(Main.scala)

我已经检查以确保在我的类路径中包含来自 SCALA_HOME/lib/的所有 jars 并且它们是。顺便说一句,这是 Scala v2.10.2

最佳答案

我只想为 future 的读者注意,也可以在 Debug模式下启动您的 sbt,然后远程连接idea 调试器。

  • 从 sbt 开始:sbt -jvm-debug 5005
  • 在idea中创建一个“远程”“运行/调试配置”(默认为端口5005)

  • 在idea中运行远程调试配置。这会将它连接到您正在运行的 sbt。然后你可以在你的宏代码和运行时设置断点 compile在 sbt 中,idea 应该在断点处停止。

    注意:重新运行 compile成功编译后,您需要 clean或更改一些代码

    关于scala - 使用 Intellij 调试 Scala 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17494010/

    相关文章:

    scala - 为什么不应该在函数式编程中使用变量赋值

    java - 如何用JGit遍历Git仓库并画图

    C define语句函数调用一次还是每次使用宏?

    java - Intellij - 在不同的窗口中调试多个 Maven 项目

    scala - 在 Scala 中无条件返回字符串

    Scala Play 2.5 对象 ws 不是包 play.api.libs 的成员

    c - 哪个 boost 宏允许我在程序中插入可变数量的语句

    c++ - 一些 googletest 宏的覆盖分析显示分布在多行时覆盖不完整 - 为什么?

    未找到 AndroidManifest.xml 文件

    JSP/Tomcat开发 : Does intellij idea automatically move packages to web-inf folder?