From: Yao Qi <yao@codesourcery.com>
To: <gdb-patches@sourceware.org>
Subject: [RCF 00/11] Visit varobj available children only in MI
Date: Sun, 24 Nov 2013 05:04:00 -0000 [thread overview]
Message-ID: <1385258996-26047-1-git-send-email-yao@codesourcery.com> (raw)
Hi,
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
--available-children-only.
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/Makefile.in | 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/available-children-only.cc | 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/available-children-only.cc
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
--
1.7.7.6
next reply other threads:[~2013-11-24 2:12 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-24 5:04 Yao Qi [this message]
2013-11-24 2:12 ` [PATCH 04/11] Remove #if HAVE_PYTHON Yao Qi
2014-01-21 20:44 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 03/11] Iterate over 'struct varobj_item' instead of PyObject Yao Qi
2014-01-21 20:44 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 10/11] Match dynamic="1" in the output of -var-list-children Yao Qi
2014-01-21 20:47 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 07/11] MI option --available-children-only Yao Qi
2014-01-21 20:45 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 09/11] Delete varobj's children on traceframe is changed Yao Qi
2014-01-21 20:47 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 11/11] Test case Yao Qi
2014-01-21 20:49 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 05/11] Rename varobj_pretty_printed_p to varobj_is_dynamic_p Yao Qi
2014-01-21 20:44 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 08/11] Iterator varobj_items by their availability Yao Qi
2014-01-21 20:46 ` Keith Seitz
2013-11-24 2:12 ` [PATCH 01/11] Use 'struct varobj_item' to represent name and value pair Yao Qi
2014-01-21 20:43 ` Keith Seitz
2014-01-22 1:00 ` Doug Evans
2014-01-23 4:08 ` Yao Qi
2014-01-23 16:08 ` Doug Evans
2013-11-24 2:12 ` [PATCH 02/11] Generalize varobj iterator Yao Qi
2014-01-21 20:44 ` Keith Seitz
2014-01-22 1:07 ` Doug Evans
2013-11-24 2:12 ` [PATCH 06/11] Use varobj_is_dynamic_p more widely Yao Qi
2014-01-21 20:44 ` Keith Seitz
2013-12-02 9:09 ` [RCF 00/11] Visit varobj available children only in MI Yao Qi
2013-12-17 12:54 ` Yao Qi
2014-01-07 18:22 ` Keith Seitz
2014-01-08 11:41 ` Joel Brobecker
2014-01-08 14:27 ` Yao Qi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1385258996-26047-1-git-send-email-yao@codesourcery.com \
--to=yao@codesourcery.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).