获取Clojure堆栈跟踪

6

请参见以下链接:https://dev59.com/H3NA5IYBdhLWcg3wfN2O - user100464
所以基本上:要么创建自己的异常,要么调用一个创建自己异常的函数?我没有意识到异常是如此低级/廉价的原语。我认为如果我只想要堆栈跟踪,肯定有一些可以消除的过热。 - user1383359
2个回答

8
使用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* - number23_cn

1
这段代码返回StackTraceElement数组,以可读的形式呈现并不难:
(.getStackTrace (Thread/currentThread))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接