Re: variable objects and registers

Vladimir Prus
2006-12-21T06:34:03Z

On Thursday 21 December 2006 04:29, Nick Roberts wrote:
> > > I think that we need more higher-level notification -- namely "new locals
> > > appeared" and either:
> > > - "varobj now refers to different object"
> > > - or have a command that creates varobjs for all variables
> > > in a function.
> >
> > The latter is "-stack-list-locals --make-varobjs" isn't it? Or are you
> > talking about variables declared within compound statements?
>
> I see now that Insight has two commands:
>
> /* This implements the tcl command gdb_get_blocks
> *
> * Returns the start and end addresses for all blocks in
> * the selected frame.
> *
> * Arguments:
> * None
> * Tcl Result:
> * A list of all valid blocks in the selected_frame.
> */
> static int
> gdb_get_blocks (ClientData clientData, Tcl_Interp *interp,
> int objc, Tcl_Obj *CONST objv[])
>
>
> and
>
>
> /* This implements the tcl command gdb_block_vars.
> *
> * Returns all variables valid in the specified block.
> *
> * Arguments:
> * The start and end addresses which identify the block.
> * Tcl Result:
> * All variables defined in the given block.
> */
> static int
> gdb_block_vars (ClientData clientData, Tcl_Interp *interp,
> int objc, Tcl_Obj *CONST objv[])
>
>
> gdb_block_vars only gets called if gdb_get_blocks finds a new block which
> then finds any variabes local to it. That way new variable objects can be
> added (and old ones deleted if a block has disappeared) while keeping
> the variable objects which are still in scope. I think we should implement
> these functions in MI (perhaps Apple already have).

Again, I think we need more automated approach. Frontend should have a
single command that:

1. Reports which local variables are really dead now
2. Creates and reports variable object for new locals
3. Reports which varobjs are out of scope

For example:

-var-update --locals
^done,varobjs=[{name="v1",in_scope="false"....}{"name="v2",in_scope="true"....}]
created=[{name="v3"....],
gone-forever=[{name="v0"...}]

Apple creates varobjs for all variables in all blocks in a function, and use "in_scope" to
track their scope. That might be good approach too. IIRC, you've posted a patch
to consider block boundaries when computing "in_scope"? That's exactly what's
needed for this approach to work.

- Volodya