debugging - 如何将 CIDER 的调试器附加到 Luminus Web 应用程序?

标签 debugging clojure cider luminus

我有一个 Luminus 项目,服务器在 localhost:7000 上运行.我用 cider-connect将自己附加到这个 repl,但我遇到了以下墙:

; CIDER 0.10.0snapshot (package: 20150820.852) \
    (Java 1.7.0_51, Clojure 1.7.0, nREPL 0.2.10)
WARNING: The following required nREPL ops are not supported: 
apropos classpath complete eldoc format-code format-edn info inspect-pop \
    inspect-push inspect-refresh macroexpand ns-list ns-vars ns-path refresh \
    resource stacktrace toggle-trace-var toggle-trace-ns undef
Please, install (or update) cider-nrepl 0.10.0-SNAPSHOT and restart CIDER

我想调试至少需要其中之一;尝试检测函数产量

clojure.lang.LispReader$ReaderException: java.lang.RuntimeException: \
    No reader function for tag dbg

我可以使用“正常”的 Clojure 项目进行调试。我试过添加通常在 ~/.lein/profiles.clj 中的样板文件到项目的project.clj没有效果:
:profiles/dev {:dependencies [[org.clojure/tools.nrepl "0.2.10"]]
               :plugins [[cider/cider-nrepl "0.10.0-SNAPSHOT"]]}

如何将 CIDER 的调试器附加到此 Web 应用程序?

最佳答案

为了节省有类似问题的人的时间,我将在此处发布摘要作为答案。
感谢来自 clojure-emacs/refactor-nrepl 的 Benedek Fazekas的 gitter 和 Sean Allred。

附上 CiderLuminus应用程序(可能还有任何其他使用嵌入式 nrepl server 作为在运行时连接到它的机会的应用程序)您应该做两件事:

  • 提供所有需要的中间件为 :handlerclojure.tools.nrepl.server/start-server .为此,您应该拥有包含中间件的库,其中列出了 lein可以找到它们(例如在 project.clj :dependencies 中)。
  • 运行启动嵌入式应用程序 nrepl server并连接 Cider使用 cider-connect .

  • 旁边cider-nrepl我想用refactor-nrepl这是Clojure refactor 所需要的.来自 Luminus website 的示例项目第一件事可以这样做:
    (ns guestbook.core
      (:require [guestbook.handler :refer [app init destroy]]
                [immutant.web :as immutant]
                [guestbook.db.migrations :as migrations]
                [clojure.tools.nrepl.server :as nrepl]
                [clojure.tools.logging :as log]
                [environ.core :refer [env]]
                [cider.nrepl :refer [cider-middleware]]
                [refactor-nrepl middleware])
      (:gen-class)) 
    
        ...
    
    (defn cider&cljr-nrepl-handler []
          (apply nrepl/default-handler (cons #'refactor-nrepl.middleware/wrap-refactor
                                       (map resolve cider-middleware))))
            
    (defn start-app
      "e.g. lein run 3000"
      [[port]]
      (let [port (http-port port)]
        (.addShutdownHook (Runtime/getRuntime) (Thread. stop-app))
        (when-let [repl-port (env :nrepl-port)]
          (repl/start {:port (parse-port repl-port)
                       :handler (cider&cljr-nrepl-handler)}))
        (http/start {:handler app
                     :init    init
                     :port    port})))
    
    然后你可以运行你的 Luminus应用程序 lein run并与 Cider 连接使用 cider-connect ( M-x cider-connectC-c M-c ),默认连接的 url 是 localhost:7000 .

    大概是嵌入式nrepl serverLuminus当应用程序已经部署在某个地方并且您想要进行一些实时调试时使用。
    对于本地开发,有标准方法:
  • 运行 lein repl在项目根目录中。 Cider将使用 lein repl :headless 完成这项工作在 cider-jack-in ( C-c M-j )。
  • 它应该启动 replyourapp.core您可以在其中运行的命名空间 (http/start {:port 3000 :init init :handler app})享受!在这种情况下,我们不需要嵌入 nrepl server .停止 http 服务器运行 (http/stop destroy) .说明here .
  • 关于debugging - 如何将 CIDER 的调试器附加到 Luminus Web 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32157019/

    相关文章:

    .net - 如何区分自定义跟踪监听器中的 Trace 和 Debug 调用?

    java - 通过 Clojure 打印机和阅读器往返 Java 类

    clojure - Leiningen 类路径问题,向项目添加第二个文件

    plugins - clojure:使用苹果酒时,profiles.clj 在某些项目中没有得到尊重

    emacs - 有没有更简单的方法可以从 emacs/cider 同时使用 BOTH clj + cljs REPL?

    emacs - 苹果酒中的 jdk 源代码查找不起作用

    java - 值没有从另一个类返回

    python - 从 pymongo 映射缩减操作记录/打印

    c - Gdb 条件正则表达式中断

    interface - 我如何访问 Clojure 库中的记录?