2012-05-10 64 views
6

我知道http://richhickey.github.com/clojure/clojure.stacktrace-api.html获取Clojure Stacktrace

有没有办法得到当前stacktrace w/o抛出异常并捕获它?

(我调试了一段代码,并希望在某些点上捕捉到踪迹,所以我可以分析发生了什么事情。)

谢谢!

+0

参见http://stackoverflow.com/questions/944991/is -there-a-way-to-dump-a-stack-trace-without-throwing-an-exception-in-java – user100464

+0

所以基本上:要么创建你自己的异常,要么调用一个创建它自己的异常的函数?我没有意识到例外是如此低级别/廉价的基元。我以为肯定会有一些过热,可以消除,如果我只是想要堆栈跟踪。 – user1383359

回答

7

使用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) 
+0

顺便说一句:pst打印栈跟踪到'* err *' –

1

此代码返回的StackTraceElement阵列是不是很难turn in readable form

(.getStackTrace (Thread/currentThread))