Re: MI: type prefixes for values

Jim Ingham
2006-02-20T18:57:31Z

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