我的目的是调试Clojure编译器以了解更多信息。 (我的项目代码有助于实现这一目的。)
我在IntelliJ IDE中设置了Clojure Compiler source和我的项目Error occurred running Grails CLI: Task 'dbmGenerateChangelog' not found in root project
。
我已将test
项目作为主要项目,而clojure
项目位于类路径中。
我通过运行test
项目中的clojure.main
类来调试调试器中的Clojure REPL。
我的clojure
项目在test
test.core
文件中包含以下来源:
core.clj
我设置了以下断点:
Compiler.java
L4709(在发布值时处理变量)AFn.java
L154(使用单个参数调用函数)现在我正在做的是在我打开断点后将以下函数调用粘贴到REPL中:
(ns test.core
(:gen-class))
(deftype SquarePeg [width length])
(deftype RoundHole [radius])
(def square-peg (SquarePeg. 5 50))
(defn insert-peg [^test.core.RoundHole peg]
(println "insert-peg inserted with: " peg))
(defn -main
"Insert a square peg in a round hole"
[& args]
(insert-peg square-peg)
(println "Done."))
现在我看到上面代码中的(insert-peg square-peg)
(如println
)贯穿pr
单个arg调用,但对AFn.java
的调用没有。 (这是我想要调试的)。
(断点开启后第一个断点跳闸)。
我确实看到insert-peg
和insert-peg
的声明贯穿square-peg
中的emit代码 - 但我正在寻找的是函数应用< / em>的。我希望Compiler.java
应用于在调试器中的编译器代码中运行的square-peg
。 (也许我错过了一个断点,或者找错了地方)。
假设:
我的问题是:如何在Clojure编译器中调试我的函数的参数应用程序?