I'm slightly late to the discussion, sorry - currently moving cities.
Cursive does indeed have a stepping debugger which works well with Clojure,
although it's quite slow (I haven't been able to figure out why, yet - I
suspect Clojure adds a lot of line information to the bytecode). There have
also been some fairly annoying bugs with it which will be fixed in the next
drop. Here's more or less what it can do:

   1. Standard stepping - step into, step over. Step out is flaky for
   non-Java languages for some reason, I believe this is fixed in the new
   version of IntelliJ (13, currently in beta, due to be released soon).
   2. Place breakpoints on any line. This generally works well but is
   occasionally frustrating with Clojure since you can pack a lot on a line.
   I've found chained sequence operations to be particularly difficult to
   debug. This is really a JVM limitation since JVMTI is line-oriented.
   3. Breakpoints can be configured in various ways. Instead of stopping
   you can configure them to print the value of an expression, or to stop only
   the current thread, or to stop all threads.
   4. Drop frame to go back in time, as long as you're not mutating any
   global state. You're not, right?
   5. Look at locals up and down the stack, as long as you have locals
   clearing disabled.
   6. For the next drop I'm going to add the ability to toggle locals
   clearing in debug REPLs with a button in the REPL tool window.
   7. You can evaluate arbitrary Clojure expressions at any point in the
   call stack.
   8. You can set a breakpoint on an arbitrary exception, and it will pause
   *at the time the exception is thrown* and you can inspect locals etc.

I'm pretty sure all of this works, and I use most of it regularly.
Expression evaluation has been broken until the current dev build so I need
to test that things that depend on it work before promising them, but I'm
pretty sure they will. They include:

   1. Watches.
   2. Being able to configure breakpoints to only stop when a particular
   expression is true.

For the next drop I'm planning to work a lot on the debugger and document
it all properly including some pretty animations, so I'll post to the list
when that is done.


On 8 November 2013 13:14, intronic <m...@pheasant.co.nz> wrote:

> Why would a break function in clojure  the language not be considered,
> a-la common-lisp?
>
>
>
> On Friday, 8 November 2013 09:31:55 UTC+10, Lee wrote:
>>
>>
>> On Nov 7, 2013, at 5:48 PM, Alex Miller wrote:
>>
>> > When you say "hit an error", I'm assuming you mean "clojure throws an
>> exception" and not "hit a breakpoint in a debugger" or something else.
>>
>> Yes -- I mean "clojure throws an exception."
>>
>> >
>> > I don't think there is one place where we could generically attach
>> locals info to a thrown exception. The JVM debugging interface (JVMTI -
>> http://docs.oracle.com/javase/7/docs/technotes/guides/jvmti/index.html)
>> can do an awful lot of things (including arbitrary class bytecode
>> transformation) so I would guess it's possible to build a java agent that
>> could do this (or to modify the Compiler to inject the right code at
>> compile time). Sounds like a fun project, but probably non-trivial.
>>
>> Too bad... unless someone wants to have that fun and then share it with
>> the rest of us :-). It still strikes me as really odd that such basic and
>> clearly desirable functionality, available forever in other environments,
>> should be so hard to come by.
>>
>>  -Lee
>
>  --
> --
> 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/groups/opt_out.
>

-- 
-- 
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/groups/opt_out.

Reply via email to