[squeak-dev] Re: Debugger: PLEASE READ [was Re: Request for feedback: mirrors]

David T. Lewis lewis at mail.msen.com
Wed May 23 20:21:15 UTC 2012


On Wed, May 23, 2012 at 12:30:48PM -0700, Eliot Miranda wrote:
> On Wed, May 23, 2012 at 12:04 PM, Andreas Raab <andreas.raab at gmx.de> wrote:
> 
> > On 5/23/2012 20:51, Eliot Miranda wrote:
> >
> >> So given that the Interpreter VM now supports the mirror primitives,
> >> does anyone object if I add the debugger changes to trunk that use the
> >> mirror primitives and hence make accurate debugging of proxies possible?
> >> The downside of doing this is that the debugger will be broken on
> >> older VMs.
> >>
> >
> > It should be possible to write the mirror prims relatively safely, e.g.:
> >
> > object: anObject instVarAt: anIndex
> >        "Primitive. Answer a fixed variable in an object. The numbering of
> > the
> >        variables corresponds to the named instance variables. Fail if the
> > index
> >        is not an Integer or is not the index of a fixed variable.
> > Essential for the
> >        debugger. See  Object documentation whatIsAPrimitive."
> >
> >        <primitive: 73>
> >        anIndex <= (self objectClass: anObject) instSize
> >                ifTrue:["Assume mirror primitives are missing"
> >                        ^anObject instVarAt: index]
> >                ifFalse:["Access beyond fixed variables."
> >                        ^self object: anObject basicAt: anIndex - (self
> > objectClass: anObject) instSize].
> >
> 
> That's a good idea.  Alas it doesn't work because the primitives won't fail
> on the older VMs.  Note that the same primitive is used for instVarAt: and
> object:instVarAt: (and likewise for object:instVarAt:put: & objectClass:
> etc).  The difference is that in the older VM the prims assume a fixed
> argument count and only pop that many objects from the stack.  Hence there
> is the potential of stack overflow in the older VMs.  In any case things
> are likely to limp along rather than fail catastrophically.  I'm not sure
> that that's a good thing or not ;)

What's the actual failure mode? If you run an image with the updated
mirroring debugger on a Squeak-4.4.7.2357 VM from http://squeakvm.org/unix/
what actually happens? Does the debugger work at all? Does the image get
messed up from calling primitives with the wrong number of arguments? Does
the VM crash after a while?

Dave



More information about the Squeak-dev mailing list