Ticket #123 (new enhancement)

Opened 7 years ago

Use Core Animation for the Clozure CL Backtrace

Reported by: alms Owned by: rme
Priority: minor Milestone:
Component: IDE Version: unspecific
Keywords: backtrace cocoa Cc:

Description

Implement a backtrace for Clozure CL using Core Animation

The basic idea is to implement a stack backtrace using something that looks like coverflow, except rotated 180 degrees so that the flow moves from top to bottom rather than left to right.

At any given time time one frame faces you (call this the "Facing Frame"). The frames above and below the Facing Frame are turned edgewise, so that you see their edges rather than their faces. But actually, like coverflow, you see a little bit of the faces of the frames that are near to Facing Frame.

While coverflow only shows you the edges of about half a dozen of the non-facing frames on each side of the Facing Frame, the CABactrace should try to show you the edges of as many as possible.

Each frame has a name and contents, like in a standard backtrace. The contents are shown on the face of the frame, but the name is shown in the space to the left (or right) of the stack of frames. That way you can see the names of lots of frames, not just the Facing Frame.

There are a number of different things that you can do by coloring the edges of the frames. The color could indicate Lisp vs foreign frames; the programmer could associate colors with specific [asdf] systems, with specific packages, or even with specific functions. This would allow you to quickly glean information by looking at the presentation of the overall stack.

A similar UI feature would let you view dataflow. Selecting an item in a frame would highlight it not only in the Facing Frame, but in all of the other frames as well. Using transparency, this would be visible in the non-facing frames as a slight change in color on their edges.

In addition to showing the names of frames to the side of the stack, other side adornments could show more info. For example, you could show restarts, catch targets, unwind-protects, special variable bindings, etc to the left of the main stack display. These could be shown as colored dots or small icons (or icons that change size as the Facing Frame changes). Mousing over or clicking on one could show additional details and offer additional actions, e.g. invoke a restart or change the value of a special variable.

You can move back and forth through the stack the same way you move through coverflow, i.e. by scrolling. However, you can also take an individual frame and drag it out of the stack to turn it into a floating window. (I'm not sure if OS X has some other special name for these.) That would let you keep the view of that frame around while you look at other frames.

Of course, all the standard things work as well: double-click a value to inspect and/or edit it, restart a frame, return from a frame, etc.

Note: See TracTickets for help on using tickets.