2012-05-10 21 views
6

Ich bin bewusst, http://richhickey.github.com/clojure/clojure.stacktrace-api.html.Getting Clojure Stacktrace

Gibt es eine Möglichkeit, den aktuellen StackTrace ohne eine Ausnahme zu erhalten und zu fangen?

(Ich bin das Debuggen ein Stück Code, und wollen stacktraces an bestimmten Punkten erfassen, so kann ich analysieren, was los ist.)

Dank!

+0

Siehe http://stackoverflow.com/questions/944991/is -there-a-weg-zu-dump-a-stack-trace-ohne-werfen-eine-ausnahme-in-java – user100464

+0

Also im Grunde: entweder erstellen Sie Ihre eigene Ausnahme oder rufen Sie eine Funktion, die eine eigene Ausnahme erstellt? Ich war mir nicht bewusst, dass Ausnahmen so niedrige/billige Primitive waren. Ich dachte sicherlich, dass es eine Überhitzung geben muss, die eliminiert werden kann, wenn ich nur den StackTrace möchte. – user1383359

Antwort

7

Verwendung 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

BTW: pst Print Stack-Trace zu '* err *' –

1

Dieser Code Rückkehr StackTraceElement Array, das nicht so schwer zu turn in readable form ist:

(.getStackTrace (Thread/currentThread))