我在Java代码上设置的断点得到了命中,但我在Clojure上设置的没有。实际上,如果调试器在Java断点上停止,那么Clojure代码上的断点就会出现x,并且它们有一个警告,例如,在debugland$eval3类的第4行找不到可执行代码。
我尝试在Clojure核心函数(如println)中设置断点,但仍然出现红色x。非常感谢任何帮助。我已尝试过Idea 9,使用Clojure 1.1和1.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可以被评估。
不确定这是否有助于您的特定情况,因为我的项目是纯Clojure,但在设置了我的项目的Clojure facet之前,我实际上无法使调试器命中我的断点(奇怪的是,我无法弄清楚如何将其添加到现有项目中 - 我必须使用facet创建一个新项目才能开始)。
这篇博客介绍了步骤,对我有效:
http://blog.tomeklipski.com/2013/04/running-and-debugging-clojure-code-with.html
我正在使用 IntelliJ IDEA 14.1.4 和 La Clojure 0.7.82