如何使用Eclipse调试Scala宏



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

第一:Scala宏棒极了!到目前为止,我更喜欢Clojure而不是Scala,但对于宏,我不再确定

我试图创建一个宏,将返回一个函数的toString和函数本身。当它工作时,我将创建一个带有明智toString的新函数。啊,快乐的日子。

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

我现在要调试它们

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

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

我做了通常的:谷歌搜索Eclipse/Scala宏/Debug/Breakpoint,阅读所有的Scala -macro标签中的stackoverflow问题,并玩了很多我能找到的每个Eclipse设置。

所以如果你们中有人知道如何设置断点,你能告诉我如何:它是eclipse版本/scala版本/…的问题?

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

要尝试此操作,您应该安装Scala-IDE以及源代码特性。请确保您正在使用的Eclipse安装是"Eclipse Classic"、"Eclipse for RCP Developers",或者您自己想出的类似的混合物。

你还需要安装Equinox Weaving Launcher插件,这将允许你创建一个"Eclipse Application with Equinox Weaving"启动器。

:

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

准备调试:

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

    • 在"location"下,指向一个新的不同的工作空间目录
    • "configuration"选项卡下,提供类似"-Xmx1536m"的内容
    • 默认情况下,您正在运行的Eclipse实例可用的所有插件应该对您即将启动的实例可用。为了在类路径中包含一个非插件项目,Eclipse可能需要一些哄骗——如果这不起作用,这是我要做的第一件事。
  2. 您现在需要启动调试配置。

    • 根据您的Scala-IDE版本,您可能会遇到"多个可用的启动器——选择一个…"警告。我会选"Equinox Weaving enabled Eclipse Application Launcher"。

进入正在调试的Eclipse实例后:

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

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

Nadavwr给出的说明很有帮助,我将它们推荐给其他人。

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

的项目

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

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

考虑使用Scala宏的人要意识到的另一件事是,直接运行Scala的错误消息要比从eclipse中得到的要好得多。

最新更新