Try out (clojure.repl/pst e 1000), where e is the exception you have caught.

Andy


On Mon, Jun 2, 2014 at 12:28 PM, Lee Spector <lspec...@hampshire.edu> wrote:

>
> In my single-threaded code, exceptions stop execution and print a stack
> backtrace. This is less informative than I would like [1], but sometimes it
> provides crucial clues.
>
> My multi-threaded code generally uses agents (just because that's the best
> way I've found to get something that behaves like pmap but with better
> multicore processor utilization [2]). By default, exceptions in agents are
> silent, which is a default that I've always found to be perplexing. But if
> I pass an :error-handler argument to agent (as in [2] below) then I can at
> least see the exception... but execution doesn't halt and I don't get a
> backtrace. That means that if I'm running in a multi-core mode (as I
> usually am) then the first unfortunate thing is that I have to notice the
> printed exception (because execution continues past it if I don't). But the
> even more unfortunate thing is that I then get no backtrace. In order to
> get a backtrace I have to re-run my whole system in single-threaded mode,
> and then hope that I hit the same error (since my systems almost always
> involve a lot of randomness).
>
> I figure it would be easy to put an exit in the :error-handler that would
> quit the whole program, but I don't know how I could get the stack
> backtrace for the triggering exception.
>
> Does anyone know how to get this?
>
> Thanks,
>
>  -Lee
>
>
> [1] Oh, how I long to see the values of locals up the stack in these
> backtraces. I understand there are ways to get this but that they require
> particular tool chains (emacs w/ritz?); my longing is for this kind of
> functionality no matter how I launch my code, or at least when I launch it
> via "lein run". The lack of this feature is the #1 thing I miss in Clojure
> relative to Common Lisp.
>
> [2] Specifically, pmap won't keep all cores busy if a thread that starts
> later finishes earlier than one that starts earlier. Here's the code that I
> use instead of pmap, which assumes there's a boolean-valued var called
> single-thread-mode:
> (defn pmapall
>   "Like pmap but: 1) coll should be finite, 2) the returned sequence
>    will not be lazy, 3) calls to f may occur in any order, to maximize
>    multicore processor utilization, and 4) takes only one coll so far."
>   [f coll]
>   (if single-thread-mode
>     (doall (map f coll))
>     (let [agents (map #(agent % :error-handler (fn [agnt except] (println
> except))) coll)]
>       (dorun (map #(send % f) agents))
>       (apply await agents)
>       (doall (map deref agents)))))
>
> --
> You received this message because you are subscribed to the Google
> Groups "Clojure" group.
> To post to this group, send email to clojure@googlegroups.com
> Note that posts from new members are moderated - please be patient with
> your first post.
> To unsubscribe from this group, send email to
> clojure+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/clojure?hl=en
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to