MI: type prefixes for values

Jim Ingham jingham@apple.com
Mon Feb 20 19:49:00 GMT 2006


Making variable objects is always slower than just printing the  
values if you are only doing it one time.  The variable objects don't  
do any magic to get their values - they go through the same code as  
"print" does ultimately, but they do a little more work getting  
there.  The overhead is not all that great, however.  Just malloc'ing  
some data structures and inserting them into a list somewhere.

The advantage of variable objects is that they cache the parsed  
expression.  So the second & third etc. evaluation is much faster.   
This is a pretty common usage pattern, especially with local  
variables, since you usually step a number of times in any given  
frame, and the locals all have to be updated with each step.  The  
variable objects have some other convenient features, like the -var- 
update command which refreshes the values will report only the  
variable objects whose values have changed, so the front end has to  
fetch less data.

It's been such a long time (~5 years) since we switched over to  
variable objects in ProjectBuilder (now Xcode) that I don't have any  
concrete numbers any more, sorry.

BTW, one of the things we added on our side was an option to -stack- 
list-locals to make variable objects for all the locals it returns.   
This is very convenient.

We also added the option to return all the locals in all the blocks  
in a function.  This allows you to present all the variables, and  
then mark the ones which are not currently in scope appropriately.  I  
find this less confusing than having the contents of the variables  
window come and go as you step through the function.  Most of our  
users seem to agree.

Jim

On Feb 19, 2006, at 11:26 PM, Vladimir Prus wrote:

> On Friday 17 February 2006 23:40, Jim Ingham wrote:
>> And... since the varobj's only parse the expression once when the
>> varobj is created, getting the current values of varobj's is much
>> faster than doing -data-evaluate-expression.  Not a big deal if you
>> are just printing one value.  But if you are trying to update all the
>> local variables on every step, this can be significant.  People tend
>> to be pretty sensitive to the speed of the "step" operation...
>
> Hi Jim,
>
> can you provide some concrete numbers? Specifically, is using  
> varobj to get
> values of all local variables faster then a single -stack-list- 
> locals, and if
> so, by how much?
>
> Thanks,
> Volodya



More information about the Gdb mailing list