public inbox for gdb@sourceware.org
 help / color / mirror / Atom feed
From: "Elmenthaler, Jens" <jens.elmenthaler@verigy.com>
To: Tom Tromey <tromey@redhat.com>
Cc: "gdb@sourceware.org" <gdb@sourceware.org>
Subject: RE: [Pretty printers] Can the name or type of a child value change?
Date: Wed, 28 Mar 2012 08:03:00 -0000	[thread overview]
Message-ID: <CEA8125BCE884349929B204B961E54711531BA1A@DEBOSVPEX001.ent.rt.verigy.net> (raw)
In-Reply-To: <m3vd7al1ns.fsf@fleche.redhat.com>

This actual is a return to a discussion that goes back to 1 1/2 years ago. The question was whether a pretty printer can change the name and type of the returned children when stepping. Tom's answer (see bottom this email) was yes.

I'm now using this feature, but stumble over a very basic question: if the name of a child changes, how does the MI variable object return this fact in -var-update? I don't see a tuple telling the frontend that this happened. It seems it should be the "exp" field that is returned by -var-list-children, but neither documentation nor gdb's code seems to consider it for -var-update.

Greetings, Jens.

p.s For references, here the original example:

Consider the following code example: 

  struct JAny { 
    union { 
      char *text; 
      int number; 
    } val; 

    // 1 -> text, 2 -> number 
    int type; 
  }; 

And the following pretty printer: 
class AnyPrinter: 
    class _iterator: 
        def __init__ (self, name, value): 
            self.count = 0 
            self.name = name 
            self.value = value 

        def __iter__(self): 
            return self 

        def next(self): 
            if self.count != 0: 
                raise StopIteration 
            
            self.count = self.count + 1 
            return (self.name, self.value)     

    def __init__(self, val): 
        self.type = val['type'] 
        
        if self.type == 1: 
            self.value = val['val']['text'] 
            self.name = "text" 
            
        if self.type == 2: 
            self.value = val['val']['number'] 
            self.name = "number" 
            
    def children(self): 
        return self._iterator(self.name, self.value) 

    def to_string(self): 
        return "JAny" 

When stepping in the debugger over a line that changes JAny.type, the name and the type of the child value returned by the pretty printer change. 

Are the MI variable objects meant to handle this? 


-----Original Message-----
From: Tom Tromey [mailto:tromey@redhat.com] 
Sent: Monday, August 16, 2010 10:54 PM
To: Elmenthaler, Jens
Cc: gdb@sourceware.org
Subject: Re: [Pretty printers] Can the name or type of a child value change?

>>>>> "Jens" == Elmenthaler, Jens <jens.elmenthaler@verigy.com> writes:

Jens> Consider the following code example:
[...]

Jens> When stepping in the debugger over a line that changes JAny.type, 
Jens> the name and the type of the child value returned by the pretty 
Jens> printer change.

Jens> Are the MI variable objects meant to handle this?

Yes.  The MI consumer is expected to understand that dynamic varobjs are
dynamic: the number and names of children can change in arbitrary ways.
This is incompatible with previous expectations, which is why consumers have to explicitly request this feature from gdb.

Tom

      reply	other threads:[~2012-03-28  8:03 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-13  6:41 Elmenthaler, Jens
2010-08-16 20:53 ` Tom Tromey
2012-03-28  8:03   ` Elmenthaler, Jens [this message]

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=CEA8125BCE884349929B204B961E54711531BA1A@DEBOSVPEX001.ent.rt.verigy.net \
    --to=jens.elmenthaler@verigy.com \
    --cc=gdb@sourceware.org \
    --cc=tromey@redhat.com \
    /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).