2016-06-30 10 views
-1

私はclojure 1.8を使用して、主にvimで編集することができます。私はvimプラグインを知らない。トランポリンを使用すると効果的なデバッグ方法

私の意見では、それは知っておくことが重要です、ので、私はplintlnなしtrampolineを使用してプログラムのデバッグに見当がつかない:

  • 機能にtrampoline
  • 引数で呼び出されるため、関数呼び出し

しかし、plintlnでデバッグすると、保守のためにトラブルが発生する傾向があります。あまりにも多くの括弧が付いているため、読みにくい傾向があります。plintlnはしばしばパフォーマンスの問題を引き起こします。私はデバッグとリリースのたびにコメントを切り替えたり、コメントを外したりしたくない。 trampolineを使用するプログラムのデバッグ方法はありますか?

答えて

0

記事 "break point in clojure"のREPLにデバッガ関数を追加する方法が見つかりました。たぶん、私は最初から使用可能なデバッガを検討する必要があります...

(defn contextual-eval [ctx expr] 
    (eval           
     `(let [[email protected](mapcat (fn [[k v]] [k `'~v]) ctx)] 
      ~expr))) 
(defmacro local-context [] 
    (let [symbols (keys &env)] 
     (zipmap (map (fn [sym] `(quote ~sym)) symbols) symbols))) 
(defn readr [prompt exit-code] 
    (let [input (clojure.main/repl-read prompt exit-code)] 
     (if (= input ::tl) 
      exit-code 
      input))) 
;;make a break point 
(defmacro break [] 
    `(clojure.main/repl 
    :prompt #(print "debug=> ") 
    :read readr 
    :eval (partial contextual-eval (local-context)))) 


Usage: 

(defn div [n d] (break) (int (/ n d))) 
(div 10 0) 
debug=> n 
10 
debug=> d 
0 
debug=> (local-context) 
{n 10, d 0} 
debug=> ::tl 
ArithmeticException Divide by zero clojure.lang.Numbers.divide (Numbers.java:156) 
関連する問題