【问题标题】:How to debug Scala Macros using Eclipse如何使用 Eclipse 调试 Scala 宏
【发布时间】:2013-05-06 09:08:08
【问题描述】:

我正在尝试使用 Eclipse IDE 在 Scala 宏实现中设置断点,但失败了

首先:Scala 宏摇滚!到目前为止,我更喜欢 Clojure 而不是 Scala,但对于宏我不再确定

我正在尝试创建一个宏,它将返回函数的 toString 和函数本身。当它起作用时,我将使用合理的 toString 创建一个新函数。啊,快乐的日子。

但我需要能够调试宏。我使用 Eclipse (20110615-0604) 和 Scala (2.10.1)。我下载了 scala-compiler-2.10.1.jar,http://www.warski.org/blog/2012/12/starting-with-scala-macros-a-short-tutorial/ 的代码现在可以工作了。我也写了几个简单的宏。宏位于 Eclipse 项目“ScalaMacro”中,使用它们的代码位于单独的项目“HelloScalaMacro”中

我现在想调试它们

按照http://docs.scala-lang.org/overviews/macros/overview.html 的说明,我创建了一个以 scala.tools.nsc.Main 作为入口点的运行时配置。我添加了 -cp HelloScala.scala,当我运行配置时,它实际上似乎在编译代码(如果我输入错误,它会正确报告错误)。

不幸的是,这些指令暗示宏实现中的断点应该导致 Eclipse 暂停。没有。

我照常进行:谷歌搜索 Eclipse/Scala 宏/Debug/Breakpoint,阅读 scala-macro 标记中的所有 stackoverflow 问题,并对我能找到的每个 Eclipse 设置进行了很多尝试。

如果你们中的任何人知道如何设置断点,能否告诉我如何设置:它是 eclipse 版本/scala 版本/...问题吗?

【问题讨论】:

    标签: scala scala-macros


    【解决方案1】:

    我自己没有尝试过,原则上它失败的可能性与你已经尝试过的一样(或更可能),但如果成功,它对你来说可能更方便。

    要尝试这个,您应该安装 Scala-IDE 以及源功能。确保您使用的是“Eclipse Classic”、“Eclipse for RCP Developers”或您自己想出的类似混合物的 Eclipse 安装。

    您还需要安装 Equinox Weaving Launcher 插件,这将允许您创建“带有 Equinox Weaving 的 Eclipse 应用程序”启动器。

    现在:

    1. 创建新工作区
    2. 创建一个 Scala 项目
    3. 在该项目中植入宏代码
    4. 在宏源中添加断点

    准备调试:

    1. 创建一个新的“Eclipse Application with Equinox Weaving”调试启动配置。取一个比“New_configuration”更优雅的名字。

      • 在“位置”下,将其指向一个新的不同工作区目录
      • 在“配置”选项卡下,提供类似“-Xmx1536m”的内容
      • 默认情况下,您正在运行的 Eclipse 实例可用的所有插件都应该可用于您即将启动的实例。 Eclipse 可能需要一些哄骗才能在类路径中包含一个非插件项目——如果这不起作用,那是我要尝试查看的第一件事。
    2. 您现在需要启动调试配置。

      • 根据您的 Scala-IDE 版本,您可能会遇到“多个启动器可用 -- 选择一个...”警告。我会选择“启用 Equinox Weaving 的 Eclipse 应用程序启动器”。

    一旦进入被调试的 Eclipse 实例:

    1. 创建要使用宏的项目
    2. 确保添加对二进制输出的依赖
    3. 将宏的小用法示例添加到正在调试的工作区中的项目中。
    4. 交叉手指
    5. 构建

    理论上,正在启动的 Eclipse 实例现在会在断点处暂停正在调试的实例。

    【讨论】:

    • 几个小时“实验书中的每个 Eclipse 选项”,我已经成功了。当 StackOverflow 允许我时,我会发布一个正确的答案
    【解决方案2】:

    Nadavwr(就在下面)给出的说明很有帮助,我将它们推荐给其他人。

    对我来说,关键的解决方案是意识到涉及两个项目,一个是定义宏的项目,另一个是使用宏的项目。相当愚蠢的是,我试图调试定义宏的项目

    所以文档中给出的说明是正确的,我只需要确保我在正确的项目中运行它们:当然很明显。

    为了其他人的利益,我发现使用命令行 scalac 来获得正确的命令行非常有帮助:更快地编辑它,并控制我所在的目录,然后在 eclipse 中

    对于考虑使用 Scala 宏的人来说,另一件事是直接运行 scalac 的错误消息比 eclipse 的错误消息要好得多。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 2015-05-02
      • 2011-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      相关资源
      最近更新 更多