From e2761be0818e380c9b6a68ffa1971bfdeb873996 Mon Sep 17 00:00:00 2001 From: Ales Huzik Date: Fri, 10 Nov 2017 14:32:37 +1100 Subject: [PATCH] Made debugging available globally, without a need to require in every namespace --- README.md | 5 ++--- src/com/gfredericks/debug_repl.clj | 8 ++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 8538c01..f89ba83 100644 --- a/README.md +++ b/README.md @@ -17,11 +17,10 @@ Add the dependency and the middleware, e.g. in your `:user` profile: [com.gfredericks.debug-repl/wrap-debug-repl]} ``` -Then when you're ready to set breakpoints: +Then when you're ready to set breakpoints (you may need to reload your +namespaces or do `(use 'clojure.core :reload)` first): ``` clojure -user> (require '[com.gfredericks.debug-repl :refer [break! unbreak!]]) -nil user> (let [x 41] (break!)) Hijacking repl for breakpoint: unnamed user> (inc x) diff --git a/src/com/gfredericks/debug_repl.clj b/src/com/gfredericks/debug_repl.clj index d178767..548215f 100644 --- a/src/com/gfredericks/debug_repl.clj +++ b/src/com/gfredericks/debug_repl.clj @@ -212,6 +212,7 @@ (wrap-eval) (handler)))) +(declare global-debug!) (defn wrap-debug-repl [handler] ;; Test for NREPL-53 at startup @@ -220,6 +221,7 @@ (when (= ::bad-middleware-ordering (:type (ex-data e))) (report-nrepl-53-bug)))) + (global-debug!) ;; having handle-debug as a separate function makes it easier to do ;; interactive development on this middleware (fn [msg] (handle-debug handler msg))) @@ -237,3 +239,9 @@ after unbreaking." [& body] `(try ~@body (catch Throwable ~'&ex (./break!) (throw ~'&ex)))) + +(defn global-debug! [] + (intern 'clojure.core 'break! @#'break!) (.setMacro (find-var 'clojure.core/break!)) + (intern 'clojure.core 'unbreak! @#'unbreak!) + (intern 'clojure.core 'unbreak!! @#'unbreak!!) + (intern 'clojure.core 'catch-break! @#'catch-break!) (.setMacro (find-var 'clojure.core/catch-break!)))