This is the mail archive of the 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]

[RCF 00/11] Visit varobj available children only in MI

This patch series proposes a feature that GDB is able to visit varobj
available children only, by adding a new option
"--available-children-only" to commands -var-create,
-var-info-num-children and -var-list-children.  This patch series was
written by Pedro in one patch.  I read the patch three months ago, split
it, add some minor things, and write test cases.  I wish I didn't
break anything, including the rationale and the implementation :)

In each traceframe, with option --available-children-only, the
children of varobj vary, so it behaves like a dynamic varobj.
Since the key of dynamic varobj is the iterator, which can be used to
visit each child.  We need a new iterator for varobj with

Current dynamic varobj is python pretty-printer specific, so the
iterator is python specific too.  In order to add a new type of iterator,
we have to generalize iterator and de-couple it from python.  At
present, iteration is performed against PyObject, but it can
generalized to a name-value pair.  That is what patch #1 ~ #3 do.
Note that patch #2 and #3 can be a single commit, but I split it for
review.  Ideally, dynamic varobj can be a generic stuff, IMO.

After the changes in patch #1 ~ #3, we find some code are not
python-specific, so #if HAVE_PYTHON can be removed.  It is done by
patch #4.

Since we think dynamic varobj is no longer python specific, we'd
better rename predicate varobj_pretty_printed_p to varobj_is_dynamic_p,
and use it more widely (done by patch #5 #6).  It paves a way for
the next patches to add a new type of dynamic varobj.

Patch #7 adds the option --available-children-only in MI code, patch
#8 adds the corresponding iterator, and patch #9 updates varobj children
when traceframe is changed.  These three should be in one commit.
Note that there is at most one iterator can be applied to one varobj.
If pretty-printer is installed and option --available-children-only
is used, GDB has to return one iterator, and we choose iterator
for available-children-only.
Patch #10 and #11 are about test cases.  Patch #10 is to teach
testsuite to match dynamic="1", and patch #11 is the test case for
option --available-children-only.

I don't include NEWS and doc patch in this series, because we'd like
to discuss on "whether we can call varobj with --available-children-only
a dynamic varobj".  The result affects the doc, IMO.  Although we
implemented varobj with --available-children-only as a dynamic varobj,
I am not sure we can do the same in doc, which is user visible.

The whole series is tested on x86_64-linux.

*** BLURB HERE ***

Yao Qi (11):
  Use 'struct varobj_item' to represent name and value pair
  Generalize varobj iterator
  Iterate over 'struct varobj_item' instead of PyObject
  Remove #if HAVE_PYTHON
  Rename varobj_pretty_printed_p to varobj_is_dynamic_p
  Use varobj_is_dynamic_p more widely
  MI option --available-children-only
  Iterator varobj_items by their availability
  Delete varobj's children on traceframe is changed.
  Match dynamic="1" in the output of -var-list-children
  Test case

 gdb/                                    |   17 +-
 gdb/mi/mi-cmd-var.c                                |  134 +++++++--
 gdb/python/py-varobj.c                             |  198 ++++++++++++
 gdb/python/python-internal.h                       |    4 +
 gdb/testsuite/gdb.trace/available-children-only.c  |   69 +++++
 gdb/testsuite/gdb.trace/ |   45 +++
 .../gdb.trace/mi-available-children-only-cxx.exp   |  126 ++++++++
 .../gdb.trace/mi-available-children-only.exp       |  198 ++++++++++++
 gdb/testsuite/lib/mi-support.exp                   |   16 +-
 gdb/varobj-iter-avail.c                            |  160 ++++++++++
 gdb/varobj-iter.h                                  |   74 +++++
 gdb/varobj.c                                       |  321 ++++++++++----------
 gdb/varobj.h                                       |   15 +-
 13 files changed, 1183 insertions(+), 194 deletions(-)
 create mode 100644 gdb/python/py-varobj.c
 create mode 100644 gdb/testsuite/gdb.trace/available-children-only.c
 create mode 100644 gdb/testsuite/gdb.trace/
 create mode 100644 gdb/testsuite/gdb.trace/mi-available-children-only-cxx.exp
 create mode 100644 gdb/testsuite/gdb.trace/mi-available-children-only.exp
 create mode 100644 gdb/varobj-iter-avail.c
 create mode 100644 gdb/varobj-iter.h


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