This is the mail archive of the
gdb@sourceware.org
mailing list for the GDB project.
Re: -var-update using formatted value
- From: "Marc Khouzam" <marc dot khouzam at ericsson dot com>
- To: <gdb at sources dot redhat dot com>
- Date: Fri, 11 Jan 2008 14:39:40 -0500
- Subject: Re: -var-update using formatted value
This may be an over-simplified solution, but I think that if GDB always use the
Natural format when storing the print value, it will fix the problem.
>From looking at the varobj.c code, I believe that the only impact will be
to the -var-update output. -var-update would no longer show variables who have
changed only due to a format change, but only those which have 'really' changed.
It is a one-line fix and I tried it successfully on the little example
that was giving a problem.
The patch is:
Index: varobj.c
===================================================================
RCS file: /cvs/src/src/gdb/varobj.c,v
retrieving revision 1.99
diff -u -r1.99 varobj.c
--- varobj.c 1 Jan 2008 22:53:13 -0000 1.99
+++ varobj.c 11 Jan 2008 19:23:48 -0000
@@ -1029,7 +1029,7 @@
lazy -- if it is, the code above has decided that the value
should not be fetched. */
if (value && !value_lazy (value))
- print_value = value_get_print_value (value, var->format);
+ print_value = value_get_print_value (value, FORMAT_NATURAL);
/* If the type is changeable, compare the old and the new values.
If this is the initial assignment, we don't have any old value
-----Original Message-----
From: gdb-owner@sourceware.org [mailto:gdb-owner@sourceware.org]On
Behalf Of Marc Khouzam
Sent: Friday, January 11, 2008 1:31 PM
To: gdb@sources.redhat.com
Subject: RE: Re: -var-update using formatted value
> Why do you need "is it really changed" query?
I'm working on the Eclipse front-end to GDB for DSDP/DSF.
It offers the ability to optionally show all formats of a variable object (binary, decimal, etc)
To do this, we use -var-set-format. And to avoid having to repeatedly query GDB for all formatted
values of a varObject, we buffer all of them in the frontend. We only query for those values again
if the varObject has changed.
The problem is that when it is time to do a -var-update (when the program stops), the varObject may not
be set to the same format as at the time of the previous var-update. And in that case,
-var-update will indicate a change in the value, which will cause the front-end to unnecessarily
clear its value-cache, and ask GDB again for each value.
What I originally thought was that -var-udpate will notify the front-end if the value 'really' changed.
But since it is not the case, to work around it, I do a var-set-format to natural before each var-update.
But it seems like a bit of a hack.
I was trying to understand why the new behaviour for var-udpate, but I haven't figured out why
a front-end would benefit from having -var-update indicate that
a variable object has changed if only its printed value is different but not its actual content.
Thanks
Marc