使用IntelliJ Idea 10和La Closure插件版本0.3.15进行Clojure调试

27
我正在使用带有La Closure插件版本0.3.15和Java 6的IntelliJ Idea 10。我已将Clojure 1.2添加到项目中。
我在Java代码上设置的断点得到了命中,但我在Clojure上设置的没有。实际上,如果调试器在Java断点上停止,那么Clojure代码上的断点就会出现x,并且它们有一个警告,例如,在debugland$eval3类的第4行找不到可执行代码。
我尝试在Clojure核心函数(如println)中设置断点,但仍然出现红色x。非常感谢任何帮助。我已尝试过Idea 9,使用Clojure 1.1和1.2,结果类似。
3个回答

2

我正在使用从github源代码构建的Clojure 1.3版本,LaClojure 0.3.74以及运行在IDEA 10.0.3上的Sun Java 6u24。我的断点似乎按照广告宣传的方式工作(在红点中获得勾号),尽管您将在非评估代码的断点处(例如[] vs.function_name [])获得x。例如:

(ns clojure.examples.hello
(:gen-class))

(defn hello          <---- Get check breakpoints here.
  []                 <---- Get x breakpoints here, can't eval [] but hello[] is okay!!!
  (let [a 12
        b (/ a 2)    <---- Get check breakpoints here.
        c (* b 3)]
    (if (< b a)
      (println (str b "<" a))      <---- Get check breakpoints here.
      (println (str a "<" b)))))

你可能需要升级到最新版本的IDEA/LaClojure(Java 6uX和Clojure 1.2应该可以正常运行),确保IDEA知道在哪里找到你的clojure jars以及使用哪个jdk(听起来你知道如何配置可用的IDEA设置,所以这方面没问题),并确保你的表达式中只有bp可以被评估。


1

我相信正在发生的是Clojure正在创建Idea调试器不理解的jvm原语。这可能意味着这些原语的大小或类型与Idea通常识别的不同。请参见此处此处

这可能可以通过制作Clojure在编写其虚拟机代码时使用的结构/原语目录,并在调试Clojure时切换到该目录来解决。不幸的是,这也意味着您可能必须等待IntelliJ来解决这个问题。

我已经向Jetbrains技术支持发布了这个问题。


0

不确定这是否有助于您的特定情况,因为我的项目是纯Clojure,但在设置了我的项目的Clojure facet之前,我实际上无法使调试器命中我的断点(奇怪的是,我无法弄清楚如何将其添加到现有项目中 - 我必须使用facet创建一个新项目才能开始)。

这篇博客介绍了步骤,对我有效:

http://blog.tomeklipski.com/2013/04/running-and-debugging-clojure-code-with.html

我正在使用 IntelliJ IDEA 14.1.4La Clojure 0.7.82


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接