2012-05-10 4 views
6

Я знаю http://richhickey.github.com/clojure/clojure.stacktrace-api.html.Получение Clojure Stacktrace

Есть ли способ получить текущую stacktrace без бросания исключения и захвата?

(я отладки кусок кода, и вы хотите, чтобы захватить stacktraces в определенные моменты, так что я могу анализировать то, что происходит.)

Спасибо!

+0

См http://stackoverflow.com/questions/944991/is -there-a-way-to-dump-a-stack-trace-without-throwing-the-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

BTW: pst print trace trace для '* err *' –

1

Этот код возврата StackTraceElement массив, который не так трудно turn in readable form:

(.getStackTrace (Thread/currentThread)) 
Смежные вопросы