如何在 Intellij 中调试 Clojure Web 应用程序?
How to debug a Clojure web application in Intellij?
我正在使用 Intellij + Cursive,我想调试使用 ring + compojure 编写的 Clojure Web 应用程序。我使用 lein 和 ring 插件在 Intellij 终端中启动应用程序:
> lein ring server-headless
我想使用 Intellij 调试这个应用程序,在源代码中设置断点,查看变量等
但是 Intellij 的 Leiningen 选项卡不显示带有 ring 命令的任务。 运行 配置也没有 运行 环命令的选项。
您需要两个步骤:
- 更新您的
project.clj
以传递额外的参数,就像这样
:ring {:nrepl {:start? true :port 4001} ;; <== Add this
:handler com.mycompany.web/myhandler} ;; you should have this
...这应该在端口 4000 中启动 Web 应用程序,并在端口 4001 中启动用于调试等的 nREPL 端口。您可以查看 lein-ring documentation 了解更多详细信息。
您应该在启动应用时看到以下内容:
$ lein ring server-headless 4000
[... some output omitted ...]
Started nREPL server on port 4001
Started server on port 4000
- 在 Cursive 中,按照 Cursive docs 中的 Remote REPLs 部分所述连接到 nREPL 服务器。您应该在主机名和 4001(或您在上一步配置中使用的任何 nREPL 端口)中使用
localhost
或 0.0.0.0
。
Intellij 有一个 remote debug Run Configuration that can be used with Clojure。
首先在project.clj
文件中的jvm添加如下选项:
:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5010"]
其中 5010 是要在 Intellij 远程调试配置中指定的端口号。
然后,在 Intellij 中,转到 Run -> Run... -> Edit Configurations...
使用 + 按钮并选择 Remote.
为配置命名,将端口更改为 5010,然后单击确定。 运行 使用 lein 的应用程序:
> lein ring server-headless
在应用程序 运行ning 之后,运行(在 Intellij 中)您创建的 Intellij 远程调试配置。您将能够设置断点,运行 逐行等
没有莱宁根
另一种选择是放弃 leiningen 和 运行 环形应用程序作为草书中的 Clojure 应用程序。您必须添加一个 -main
函数:
(defn -main [] (run-jetty app {:port 8080})
app
是您定义路由并在 project.clj.
中用作环处理程序 :ring {:handler xxx/app}
的函数 您必须要求 [ring.adapter.jetty :refer [run-jetty]]
并在 Intellij 中调试文件作为Clojure 应用程序。
我正在使用 Intellij + Cursive,我想调试使用 ring + compojure 编写的 Clojure Web 应用程序。我使用 lein 和 ring 插件在 Intellij 终端中启动应用程序:
> lein ring server-headless
我想使用 Intellij 调试这个应用程序,在源代码中设置断点,查看变量等
但是 Intellij 的 Leiningen 选项卡不显示带有 ring 命令的任务。 运行 配置也没有 运行 环命令的选项。
您需要两个步骤:
- 更新您的
project.clj
以传递额外的参数,就像这样
:ring {:nrepl {:start? true :port 4001} ;; <== Add this
:handler com.mycompany.web/myhandler} ;; you should have this
...这应该在端口 4000 中启动 Web 应用程序,并在端口 4001 中启动用于调试等的 nREPL 端口。您可以查看 lein-ring documentation 了解更多详细信息。
您应该在启动应用时看到以下内容:
$ lein ring server-headless 4000
[... some output omitted ...]
Started nREPL server on port 4001
Started server on port 4000
- 在 Cursive 中,按照 Cursive docs 中的 Remote REPLs 部分所述连接到 nREPL 服务器。您应该在主机名和 4001(或您在上一步配置中使用的任何 nREPL 端口)中使用
localhost
或0.0.0.0
。
Intellij 有一个 remote debug Run Configuration that can be used with Clojure。
首先在project.clj
文件中的jvm添加如下选项:
:jvm-opts ["-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5010"]
其中 5010 是要在 Intellij 远程调试配置中指定的端口号。
然后,在 Intellij 中,转到 Run -> Run... -> Edit Configurations...
使用 + 按钮并选择 Remote.
为配置命名,将端口更改为 5010,然后单击确定。 运行 使用 lein 的应用程序:
> lein ring server-headless
在应用程序 运行ning 之后,运行(在 Intellij 中)您创建的 Intellij 远程调试配置。您将能够设置断点,运行 逐行等
没有莱宁根
另一种选择是放弃 leiningen 和 运行 环形应用程序作为草书中的 Clojure 应用程序。您必须添加一个 -main
函数:
(defn -main [] (run-jetty app {:port 8080})
app
是您定义路由并在 project.clj.
中用作环处理程序 :ring {:handler xxx/app}
的函数 您必须要求 [ring.adapter.jetty :refer [run-jetty]]
并在 Intellij 中调试文件作为Clojure 应用程序。