[英]How can I make Visual Studio automatically attach its debugger to both a web application and web service?
[英]How can I attach CIDER's debugger to a Luminus web application?
我有一個 Luminus 項目,服務器在localhost:7000
上運行。 我使用cider-connect
將自己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
的 gitter 和 Sean Allred 的 Benedek Fazekas。
要將Cider
附加到Luminus
應用程序(可能還有任何其他使用嵌入式nrepl server
作為在運行時連接到它的機會的應用程序),您應該做兩件事:
將所有需要的中間件作為:handler
給clojure.tools.nrepl.server/start-server
。 為此,您應該在lein
可以找到它們的地方列出包含中間件的庫(例如在project.clj
:dependencies
)。
運行啟動嵌入式nrepl server
應用程序,並使用cider-connect
將Cider
連接到它。
除了cider-nrepl
我想使用Clojure refactor所需的refactor-nrepl
。 使用Luminus 網站的示例項目,第一件事可以這樣完成:
(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})))
然后,您可以使用lein run
運行您的Luminus
應用程序,並使用cider-connect
( Mx cider-connect
或Cc Mc
)將其與Cider
cider-connect
,默認情況下,連接的 url 為localhost:7000
。
據推測, Luminus
嵌入式nrepl server
旨在在應用程序已經部署在某處並且您想要進行一些實時調試時使用。 對於本地開發,有標准方法:
lein repl
。 Cider
將使用lein repl :headless
完成這項工作lein repl :headless
在cider-jack-in
( Cc Mj
) 上lein repl :headless
。yourapp.core
命名空間中啟動repl
,您可以在其中運行(http/start {:port 3000 :init init :handler app})
並享受! 在這種情況下,我們不需要嵌入式nrepl server
。 停止 http 服務器運行(http/stop destroy)
。 它是在此處描述的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.