Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Vladimir Prus <ghost@cs.msu.su>
To: Nick Roberts <nickrob@snap.net.nz>, gdb-patches@sources.redhat.com
Subject: Re: variable objects and registers
Date: Wed, 20 Dec 2006 18:39:00 -0000	[thread overview]
Message-ID: <E1Gx6GU-0006QG-A6@zigzag.lvk.cs.msu.su> (raw)
In-Reply-To: <17800.24415.300779.516967@kahikatea.snap.net.nz>

Nick Roberts wrote:

>  > ? Or maybe we should not mix easy "create one varobj from expression"
>  > command with "create a bunch of varobj" command and add the following:
>  > 
>  >         -var-create-and-list --registers ...
>  >         -var-create-and-list --locals ...
>  >         -var-create-and-list --whatever-else ...
> 
> A separate command does indeed seem best.
> 
>  > or just "-var-list"? On the other hand, on Apple branch the varobjs for
>  > locals are created using
>  > 
>  >         -stack-list-locals --make-varobjs
> 
> Most of the functionality seems to come from varobj.c so, unless Apple
> contribute this code to the FSF repository, I see no need to follow their
> approach.

I don't think this particular interface decision is important, but I don't
follow your general principle. It does not matter if Apple ports their code
to FSF, or we do it -- if differences are introduces for no good reason,
it makes it harder to merge changes for everyone, and that's bad.

> 
>  > I slightly prefer
>  > 
>  >         -var-list --locals
> 
> -var-list-create --locals?  -var-create-list --locals?

I've settled on -var-list. I don't think 'create' clarifies much,
and this is not user command, and '-var-list-children' also creates
variable objects without having 'create' in the name.

> 
> Insight creates variable objects for display of locals.  The delay is
> quite apparent when there are more than a couple of them, but it only
> updates when
> the frame changes.  

By "updates" you mean '-var-update' or regetting new list of locals and 
creating new vars?

> In Emacs, I update after every GDB command using "info 
> locals" which is quicker 

Quicker than what? -var-update? Is this a measurable difference? If
so, we should fix it.

> but not as good.  We need to find a way to detect 
> when the frame changes 

FWIW, KDevelop uses "info frame" 

> and report it e.g 
> 
>    * NOTIFY-ASYNC-OUTPUT contains supplementary information that the
>      client should handle (e.g., a new breakpoint information).  All
>      notify output is prefixed by `='.
> 
> =frame-changed
> 
> I started looking at this in the thread
> 
> http://sourceware.org/ml/gdb/2006-06/msg00162.html
> 
> but didn't make good progress.

I think that we need more higher-level notification -- namely "new locals
appeared" and either:
        - "varobj now refers to different object"
        - or have a command that creates varobjs for all variables
        in a function.

That way, we won't need to guess how varobjs should be changes when frame id
changes.

> 
>  > >...
>  > > +static struct varobj *
>  > > +create_varobj_in_frame (char *name, char *expression, char *frame)
>  > > +{
>  > > +  CORE_ADDR frameaddr = 0;
>  > > +  struct cleanup *cleanup;
>  > > +  enum varobj_type var_type;
>  > > +
>  > > +  if (strcmp (frame, "*") == 0)
>  > > +    var_type = USE_CURRENT_FRAME;
>  > > +  else if (strcmp (frame, "@") == 0)
>  > > +    var_type = USE_SELECTED_FRAME;
>  > > +  else
>  > > +    {
>  > > +      var_type = USE_SPECIFIED_FRAME;
>  > > +      frameaddr = string_to_core_addr (frame);
>  > > +    }
>  > > +
>  > > +  if (varobjdebug)
>  > > +    fprintf_unfiltered (gdb_stdlog,
>  > > +                 "Name=\"%s\", Frame=\"%s\" (0x%s),
>  > > Expression=\"%s\"\n",
>  > > +                     name, frame, paddr (frameaddr), expression);
>  > > +
>  > > +  return varobj_create (name, expression, frameaddr, var_type);
>  > > +}
>  > > +
>  > > 
>  > > I think the function above should go in varobj.c
>  > 
>  > Then, the varobj.c would have to expose magic "@" and "*" values in its
>  > interface. I think it's better to keep this closer to parsing code and
>  > keep varobj.c separated.
> 
> Yes.  OK, in that case I would call the function create_var_in_frame. 

That function creates and returns variable object. Calling
it 'create_var_in_frame' would imply that it creates some 'var',
and that would not be accurate.

> Likewise with existing functions:
> 
> varobj_update_one    -->  var_update
> print_varobj         -->  print_var

This one, too, prints variable object.

> so that they are in the file you would expect to find them.

I'm not sure. I don't know why a name of a function should map to the
name of the file in the way you indicate.

- Volodya



  reply	other threads:[~2006-12-20 18:39 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-06 10:57 Nick Roberts
2006-12-19 17:59 ` Vladimir Prus
2006-12-19 21:58   ` Nick Roberts
2006-12-20 18:39     ` Vladimir Prus [this message]
2006-12-20 20:34       ` Nick Roberts
2006-12-21  1:34         ` Nick Roberts
2006-12-21  6:34           ` Vladimir Prus
2006-12-21  7:57             ` Nick Roberts
2006-12-21  8:34               ` Vladimir Prus
2006-12-30 20:26           ` Daniel Jacobowitz
2006-12-30 20:41             ` Vladimir Prus
2006-12-30 20:50               ` Daniel Jacobowitz
2006-12-30 23:05                 ` Nick Roberts
2006-12-21  6:43         ` Vladimir Prus
2006-12-21  8:34           ` Nick Roberts
     [not found]             ` <0E190425-7C4F-4C6E-B8B3-9A3FA79F6FE3@apple.com>
2006-12-21 23:30               ` Nick Roberts
     [not found]                 ` <1B6B17FA-65DE-4CE2-9BE0-20DA74780EEA@apple.com>
2006-12-22  4:47                   ` Nick Roberts
2006-12-22  6:23                     ` Vladimir Prus
2006-12-22  6:51                       ` Nick Roberts
2006-12-22  7:30                         ` Vladimir Prus
2007-01-05  9:04             ` Vladimir Prus
  -- strict thread matches above, loose matches on Subject: below --
2006-11-29 17:21 Vladimir Prus
2006-12-05 21:16 ` Daniel Jacobowitz
2006-12-06  9:25   ` Vladimir Prus
2006-12-19 22:02     ` Daniel Jacobowitz

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=E1Gx6GU-0006QG-A6@zigzag.lvk.cs.msu.su \
    --to=ghost@cs.msu.su \
    --cc=gdb-patches@sources.redhat.com \
    --cc=nickrob@snap.net.nz \
    /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