如何在 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 命令的任务。 运行 配置也没有 运行 环命令的选项。

您需要两个步骤:

  1. 更新您的 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
  1. 在 Cursive 中,按照 Cursive docs 中的 Remote REPLs 部分所述连接到 nREPL 服务器。您应该在主机名和 4001(或您在上一步配置中使用的任何 nREPL 端口)中使用 localhost0.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 应用程序。