per-thread variable objects

Nick Roberts nickrob@snap.net.nz
Mon Mar 24 21:00:00 GMT 2008


 > I've checked it the following revision of Nick's previous
 > patch (http://permalink.gmane.org/gmane.comp.gdb.devel/22707) that
 > makes variable object remember the thread they belong to.
 > I've tested this manually, proper thread and docs will be following
 > shortly.
 > 
 > Nick,
 > the changes I've made are as follows:
 > 
 > 	- I use the valid_block instead of special -2 value
 > 	to check if a varobj is global.
 > 	- I did not use -1 value to indicate the thread is gone. Presently,
 > 	we don't specifically mark variables object whose frame is gone,
 > 	and I don't see why we should be do differently for threads.
 > 
 > If something seems wrong, please say.

It would be nice to reach an agreement before the changes are commmitted.
Clearly as maintainer, you have final say if we can't reach such an
agreement.

The final patch looks cleaner than my original one and appears to do the same
thing.  Thanks.

 > Index: gdb/ChangeLog
 > ===================================================================
 > RCS file: /cvs/src/src/gdb/ChangeLog,v
 > retrieving revision 1.9247
 > diff -u -p -r1.9247 ChangeLog
 > --- gdb/ChangeLog	23 Mar 2008 17:29:32 -0000	1.9247
 > +++ gdb/ChangeLog	24 Mar 2008 17:31:09 -0000
 > @@ -1,3 +1,15 @@
 >...

I think ChangeLog entries shouldn't be presented as diffs.

 >...
 > +/* If frame associated with VAR can be found, switch
 > +   to it and return 1.  Otherwise, return 0.  */

It's not enough for a frame to be found, the pc also has to have an address
value within the valid block.  This is one reason why, for such small
functions, I would rather the code spoke for itself.

 > +static int
 > +check_scope (struct varobj *var)
 > +{
 > +  struct frame_info *fi;
 > +  int scope;
 > +
 > +  fi = frame_find_by_id (var->root->frame);
 > +  scope = fi != NULL;
 > +
 > +  if (fi)
 > +    {
 > +      CORE_ADDR pc = get_frame_pc (fi);
 > +      if (pc <  BLOCK_START (var->root->valid_block) ||
 > +	  pc >= BLOCK_END (var->root->valid_block))
 > +	scope = 0;
 > +      else
 > +	select_frame (fi);
 > +    }
 > +  return scope;
 > +}

-- 
Nick                                           http://www.inet.net.nz/~nickrob



More information about the Gdb-patches mailing list