我尝试使用Eclipse IDE在Scala Macro实现中设置断点,但失败了
首先: Scala Macros摇滚!到目前为止,我更喜欢Clojure而不是Scala,但是对于宏,我不再确定
我正在尝试创建一个宏,它将返回函数的toString和函数本身。当它起作用时,我将用一个合理的toString创建一个新函数。啊快乐的日子。
但我需要能够调试宏。我使用Eclipse (20110615-0604)和Scala (2.10.1)。我下载了scala编译器-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暂停。事实并非如此。
我做了一些常见的事情:在google上搜索Eclipse/Scala宏/Debug/Breakpoint,阅读scala-宏标记中的所有stackoverflow问题,并对我能找到的每一个eclipse设置进行了大量的尝试。
所以,如果你们中的任何人知道如何设置断点,可以让我知道如何:它是eclipse版本/ scala版本/ ...有什么问题?
发布于 2013-05-06 20:08:00
我自己还没有尝试过,原则上失败的可能性和你已经尝试过的一样大,但如果成功了,对你来说可能更方便。
要尝试这一点,您应该安装Scala-IDE以及源特性。确保您正在使用的Eclipse安装是"Eclipse Classic“、"Eclipse for RCP Developers”或您自己想出来的类似组合。
您还需要安装Equinox Weaving启动器插件,该插件允许您创建"Eclipse Application with Equinox Weaving“启动器。
现在:
中添加断点
准备调试:
更优雅的名字
- under "location", point it towards a new _different_ workspace directory
- under the "configuration" tab, provide something like "-Xmx1536m"
- By default, all plugins available to your running Eclipse instance should be available to the instance you are about to launch. Eclipse may need some cajoling in order to include a non-plugin project in the classpath -- if this doesn't work, that's the first thing I'd try to look at.
- Depending on your Scala-IDE version, you may encounter a "Multiple launchers available -- Select one..." warning. I'd go for "Equinox Weaving enabled Eclipse Application Launcher".
一旦进入正在调试的Eclipse实例:
创建要使用macro
从理论上讲,正在启动的Eclipse实例现在将在您的断点处暂停正在调试的实例。
发布于 2013-05-06 20:39:27
对我来说,关键的解决方案是意识到涉及到两个项目,定义宏的项目和使用宏的项目。相当愚蠢的是,我试图调试定义宏的项目
所以文档中给出的指令是正确的,我只需要确保我在正确的项目中运行它们:当然是显而易见的。
为了其他人的利益,我发现使用命令行scalac来使命令行正确是非常有帮助的:比在eclipse中更快地编辑和控制我所在的目录。
对于考虑使用Scala宏的人来说,要意识到的另一件事是,直接运行scalac的错误消息比eclipse的错误消息要好得多。
https://stackoverflow.com/questions/16395399
复制相似问题