This is the mail archive of the gdb@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: MI: type prefixes for values


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]