public inbox for gdb-prs@sourceware.org
help / color / mirror / Atom feed
From: "tromey at redhat dot com" <sourceware-bugzilla@sourceware.org>
To: gdb-prs@sourceware.org
Subject: [Bug mi/13419] Unable to pretty-print map of lists
Date: Wed, 22 Aug 2012 17:29:00 -0000	[thread overview]
Message-ID: <bug-13419-4717-uyOXAsJPzJ@http.sourceware.org/bugzilla/> (raw)
In-Reply-To: <bug-13419-4717@http.sourceware.org/bugzilla/>

http://sourceware.org/bugzilla/show_bug.cgi?id=13419

Tom Tromey <tromey at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |WAITING
                 CC|                            |tromey at redhat dot com
            Version|unknown                     |HEAD

--- Comment #1 from Tom Tromey <tromey at redhat dot com> 2012-08-22 17:28:39 UTC ---
It all seems pretty reasonable to me, but I'm not totally sure
what problem you are seeing.

(gdb) p m
$2 = std::map with 2 elements = {
  ["one"] = std::list = {
    [0] = "a",
    [1] = "b",
    [2] = "c"
  },
  ["two"] = std::list = {
    [0] = "1",
    [1] = "2",
    [2] = "3"
  }
}

That's the baseline.  Now for MI:

(gdb) 
-enable-pretty-printing
^done
(gdb) 
-var-create - * m
^done,name="var1",numchild="0",value="{...}",type="map_t",thread-id="1",displayhint="map",dynamic="1",has_more="1"
(gdb) 
-var-list-children --all-values var1
^done,numchild="4",displayhint="map",children=[child={name="var1.[0]",exp="[0]",numchild="0",value="
\"one\"",type="const std::basic_string<char, std::char_traits<char>,
std::allocator<char>
>",thread-id="1",displayhint="string",dynamic="1"},child={name="var1.[1]",exp="[1]",numchild="0",value="{...}",type="std::list<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > >
>",thread-id="1",dynamic="1"},child={name="var1.[2]",exp="[2]",numchild="0",value="
\"two\"",type="const std::basic_string<char, std::char_traits<char>,
std::allocator<char>
>",thread-id="1",displayhint="string",dynamic="1"},child={name="var1.[3]",exp="[3]",numchild="0",value="{...}",type="std::list<std::basic_string<char,
std::char_traits<char>, std::allocator<char> >,
std::allocator<std::basic_string<char, std::char_traits<char>,
std::allocator<char> > > >",thread-id="1",dynamic="1"}],has_more="0"


A few things to note here.

First, dynamic varobjs must be handled differently from ordinary ones.
This is why the MI client has to request them.
It is usually wrong to request all the children, you should request just
a range of them.  Otherwise you can be overwhelmed with data, like if
the user tries to show a vector with millions of elements.

In this output, the display hint tells the MI client some useful info.
In particular it says that var1.[0] is a key, var1.[1] is an element, etc.

I'm not sure why this doesn't list the children of var1.[1] -- I don't
know if that is a dynamic/static varobj difference, or just the norm,
or even if it is intended.  But in any case it is easy to ask for
the children of var1.[1]:

-var-list-children --all-values var1.[1] 
^done,numchild="3",children=[child={name="var1.[1].[0]",exp="[0]",numchild="0",value="
\"a\"",type="std::basic_string<char, std::char_traits<char>,
std::allocator<char>
>",thread-id="1",displayhint="string",dynamic="1"},child={name="var1.[1].[1]",exp="[1]",numchild="0",value="
\"b\"",type="std::basic_string<char, std::char_traits<char>,
std::allocator<char>
>",thread-id="1",displayhint="string",dynamic="1"},child={name="var1.[1].[2]",exp="[2]",numchild="0",value="
\"c\"",type="std::basic_string<char, std::char_traits<char>,
std::allocator<char>
>",thread-id="1",displayhint="string",dynamic="1"}],has_more="0"


The "{...}" thing is unfortunate.  It was requested by the MI maintainer
when dynamic varobjs were written.  In most cases I think it doesn't matter
much; but perhaps we can change it someday.

Could you maybe say what in the above is causing problems?

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


  parent reply	other threads:[~2012-08-22 17:29 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-20 22:42 [Bug mi/13419] New: " mail at milianw dot de
2011-11-21 11:46 ` [Bug mi/13419] " valentyn.pavliuchenko at gmail dot com
2012-08-22 17:29 ` tromey at redhat dot com [this message]
2014-09-12 23:05 ` sergiodj at redhat dot com

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=bug-13419-4717-uyOXAsJPzJ@http.sourceware.org/bugzilla/ \
    --to=sourceware-bugzilla@sourceware.org \
    --cc=gdb-prs@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).