我知道http://richhickey.github.com/clojure/clojure.stacktrace-api.html。獲取Clojure Stacktrace
有沒有辦法得到當前stacktrace w/o拋出異常並捕獲它?
(我調試了一段代碼,並希望在某些點上捕捉到蹤跡,所以我可以分析發生了什麼事情。)
謝謝!
我知道http://richhickey.github.com/clojure/clojure.stacktrace-api.html。獲取Clojure Stacktrace
有沒有辦法得到當前stacktrace w/o拋出異常並捕獲它?
(我調試了一段代碼,並希望在某些點上捕捉到蹤跡,所以我可以分析發生了什麼事情。)
謝謝!
使用clojure.repl.pst
user=> (try (/ 1 0) (catch Exception e (pst e)))
ArithmeticException Divide by zero
clojure.lang.Numbers.divide (Numbers.java:156)
clojure.lang.Numbers.divide (Numbers.java:3691)
user/eval28 (NO_SOURCE_FILE:8)
clojure.lang.Compiler.eval (Compiler.java:6511)
clojure.lang.Compiler.eval (Compiler.java:6477)
clojure.core/eval (core.clj:2797)
clojure.main/repl/read-eval-print--6569 (main.clj:245)
clojure.main/repl/fn--6574 (main.clj:266)
clojure.main/repl (main.clj:266)
clojure.main/repl-opt (main.clj:332)
clojure.main/main (main.clj:427)
clojure.lang.Var.invoke (Var.java:423)
順便說一句:pst打印棧跟蹤到'* err *' –
此代碼返回的StackTraceElement陣列是不是很難turn in readable form:
(.getStackTrace (Thread/currentThread))
參見http://stackoverflow.com/questions/944991/is -there-a-way-to-dump-a-stack-trace-without-throwing-an-exception-in-java – user100464
所以基本上:要麼創建你自己的異常,要麼調用一個創建它自己的異常的函數?我沒有意識到例外是如此低級別/廉價的基元。我以爲肯定會有一些過熱,可以消除,如果我只是想要堆棧跟蹤。 – user1383359