Ideally, in a Lisp I'd think the unit of breakpoints would not be a line but instead an s-expression, tripping before evaluating the body of the expression.
On Fri, Nov 8, 2013 at 12:24 AM, Colin Fleming <colin.mailingl...@gmail.com>wrote: > 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. > -- -- 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.